]> git.sur5r.net Git - ngadmin/blob - lib/src/protocol.h
3b26f1dfe1defa9c579c069d69130963d4e49c94
[ngadmin] / lib / src / protocol.h
1
2 #ifndef DEF_PROTOCOL
3 #define DEF_PROTOCOL
4
5
6 #include <stdio.h>
7 #include <stdbool.h>
8 #include <string.h>
9 #include <arpa/inet.h>
10 #include <netinet/ether.h>
11
12 #include <ngadmin.h>
13 #include "list.h"
14 #include "lib.h"
15
16
17
18
19
20 struct ng_header {
21  char unk1;                     // always 1, maybe version
22  char code;                     // request code: read request, read reply, write request, write reply
23  unsigned short error;          // error code, 0 when no error
24  unsigned short attr;           // attribute code which caused error, 0 when no error
25  char unk2[2];                  // always 0, unknown
26  char client_mac[ETH_ALEN];     // client MAC address
27  char switch_mac[ETH_ALEN];     // switch MAC address
28  unsigned int seqnum;           // sequence number
29  char proto_id[4];              // always "NSDP", maybe short for "Netgear Switch Description Protocol"
30  char unk3[4];                  // always 0, unknown
31  char data[0];
32 } __attribute__((packed)) ;
33
34 struct attr_header {
35  unsigned short attr;
36  unsigned short size;
37  char data[0];
38 } __attribute__((packed)) ;
39
40
41 struct ng_packet {
42  union {
43   char *buffer;
44   struct ng_header *nh;
45  };
46  int maxlen;
47  struct attr_header *ah;
48 };
49
50
51 struct attr {
52  unsigned short attr;
53  unsigned short size;
54  void *data;
55 };
56
57
58
59 extern const struct ether_addr nullMac;
60
61
62
63 // 
64 int min (int a, int b);
65
66 // 
67 void initNgHeader (struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
68
69 // 
70 bool validateNgHeader (const struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
71
72 // 
73 void initNgPacket (struct ng_packet *np);
74
75 // 
76 void addPacketAttr (struct ng_packet *np, unsigned short attr, unsigned short size, void* data);
77
78 // 
79 void addPacketEmptyAttr (struct ng_packet *np, unsigned short attr);
80
81 // 
82 void addPacketByteAttr (struct ng_packet *np, unsigned short attr, char val);
83
84 // 
85 void addPacketShortAttr (struct ng_packet *np, unsigned short attr, short val);
86
87 // 
88 int getPacketTotalSize (const struct ng_packet *np);
89
90 // 
91 struct attr* newEmptyAttr (unsigned short attr);
92
93 // 
94 struct attr* newAttr (unsigned short attr, unsigned short size, void *data);
95
96 // 
97 struct attr* newByteAttr (unsigned short attr, unsigned char value);
98
99 // 
100 struct attr* newShortAttr (unsigned short attr, short value);
101
102 // 
103 struct attr* newIntAttr (unsigned short attr, int value);
104
105 // 
106 struct attr* newAddrAttr (unsigned short attr, struct in_addr value);
107
108 // 
109 void freeAttr (struct attr *at);
110
111 // 
112 void extractPacketAttributes (struct ng_packet *np, unsigned short *error, unsigned short *attr_error, List *attr);
113
114 // 
115 void extractSwitchAttributes (struct swi_attr *sa, const List *l);
116
117
118
119
120 #endif
121