10 #include <netinet/ether.h>
21 char unk1; // always 1
24 char unk2; // always 0
25 unsigned short attr; // attribute code which caused error
26 char unk3[2]; // always 0
27 char client_mac[ETH_ALEN];
28 char switch_mac[ETH_ALEN];
30 char proto_id[4]; // always "NSDP"
31 char unk4[4]; // always 0
33 } __attribute__((packed)) ;
39 } __attribute__((packed)) ;
48 struct attr_header *ah;
60 extern const unsigned short helloRequest[];
62 extern const struct ether_addr nullMac;
67 int min (int a, int b);
70 void initNgHeader (struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
73 bool validateNgHeader (const struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
76 void initNgPacket (struct ng_packet *np);
79 void addPacketAttr (struct ng_packet *np, unsigned short attr, unsigned short size, void* data);
82 void addPacketEmptyAttr (struct ng_packet *np, unsigned short attr);
85 void addPacketByteAttr (struct ng_packet *np, unsigned short attr, char val);
88 void addPacketShortAttr (struct ng_packet *np, unsigned short attr, short val);
91 int getPacketTotalSize (const struct ng_packet *np);
94 struct attr* newEmptyAttr (unsigned short attr);
97 struct attr* newAttr (unsigned short attr, unsigned short size, void *data);
100 struct attr* newByteAttr (unsigned short attr, unsigned char value);
103 struct attr* newIntAttr (unsigned short attr, int value);
106 void freeAttr (struct attr *at);
109 void extractPacketAttributes (struct ng_packet *np, char *error, unsigned short *attr_error, List *attr);
112 void extractSwitchAttributes (struct swi_attr *sa, const List *l);