]> git.sur5r.net Git - ngadmin/blob - lib/src/protocol.h
f535abac4c337b1ef23289d563ead7e11194ea1e
[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 // 
65 int trim (char *txt, int start);
66
67 // 
68 int min (int a, int b);
69
70 // 
71 void initNgHeader (struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
72
73 // 
74 bool validateNgHeader (const struct ng_header *nh, char code, const struct ether_addr *client_mac, const struct ether_addr *switch_mac, unsigned int seqnum);
75
76 // 
77 void initNgPacket (struct ng_packet *np);
78
79 // 
80 void addPacketAttr (struct ng_packet *np, unsigned short attr, unsigned short size, void* data);
81
82 // 
83 void addPacketEmptyAttr (struct ng_packet *np, unsigned short attr);
84
85 // 
86 void addPacketByteAttr (struct ng_packet *np, unsigned short attr, char val);
87
88 // 
89 void addPacketShortAttr (struct ng_packet *np, unsigned short attr, short val);
90
91 // 
92 int getPacketTotalSize (const struct ng_packet *np);
93
94 // 
95 struct attr* newEmptyAttr (unsigned short attr);
96
97 // 
98 struct attr* newAttr (unsigned short attr, unsigned short size, void *data);
99
100 // 
101 struct attr* newByteAttr (unsigned short attr, unsigned char value);
102
103 // 
104 struct attr* newShortAttr (unsigned short attr, short value);
105
106 // 
107 struct attr* newIntAttr (unsigned short attr, int value);
108
109 // 
110 struct attr* newAddrAttr (unsigned short attr, struct in_addr value);
111
112 // 
113 void freeAttr (struct attr *at);
114
115 // 
116 void extractPacketAttributes (struct ng_packet *np, unsigned short *error, unsigned short *attr_error, List *attr);
117
118 // 
119 void extractSwitchAttributes (struct swi_attr *sa, const List *l);
120
121
122
123
124 #endif
125