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