15 struct sockaddr_in local, remote;
16 socklen_t slen = sizeof(struct sockaddr_in);
18 unsigned short attr_error;
24 s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
32 memset(&local, 0, sizeof(struct sockaddr_in));
33 local.sin_family = AF_INET;
34 local.sin_addr.s_addr = htonl(INADDR_ANY);
35 local.sin_port = htons(SWITCH_PORT);
37 if (bind(s, (struct sockaddr*)&local, sizeof(struct sockaddr_in)) < 0) {
45 len = recvfrom(s, buffer, sizeof(buffer), 0, (struct sockaddr*)&remote, &slen);
52 printf("---------------------------------\n");
58 attr = createEmptyList();
60 if (ntohs(remote.sin_port) != CLIENT_PORT ||
61 len < (int)sizeof(struct ng_header) ||
62 !validateNgHeader(np.nh, 0, NULL, NULL, 0) ||
63 extractPacketAttributes(&np, attr, 0) < 0) {
64 printf("wrong packet\n");
68 printf("received %d attribute(s)\n", attr->count);
70 for (ln = attr->first; ln != NULL; ln = ln->next) {
72 printf("received attribute code = %04X, length = %d\n", at->attr, at->size);
75 destroyList(attr, (void(*)(void*))freeAttr);
77 printf("---------------------------------\n\n");