source: libpacketdump/ospf2_1.c @ bd119b3

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since bd119b3 was 1453435, checked in by Shane Alcock <salcock@…>, 10 years ago
  • Fixed bug where OSPF Hello packets did not support multiple neighbours
  • Updated OSPF Hello libpacketdump decoder to report all neighbours
  • Updated documentation to describe OSPF structures
  • Property mode set to 100644
File size: 1.5 KB
Line 
1#include <sys/types.h>
2#include <sys/socket.h>
3#include <netinet/in.h>
4#include <stdio.h>
5#include <arpa/inet.h>
6#include "libpacketdump.h"
7
8
9DLLEXPORT void decode(int link_type UNUSED,const char *packet,unsigned len) {
10
11        libtrace_ospf_hello_v2_t *hello = (libtrace_ospf_hello_v2_t *)packet;
12        struct in_addr *neigh;
13
14        if (len < 4) 
15                return;
16        printf(" OSPF Hello: Network Mask %s\n", inet_ntoa(hello->mask));
17        if (len < 6)
18                return;
19
20        printf(" OSPF Hello: Interval %u ", ntohs(hello->interval));
21
22        if (len < 7) {
23                printf("\n");
24                return;
25        }
26
27        printf("Options ");
28
29        if (hello->hello_options.e_bit)
30                printf("E ");
31        if (hello->hello_options.mc_bit)
32                printf("MC ");
33        if (hello->hello_options.np_bit)
34                printf("N/P ");
35        if (hello->hello_options.ea_bit)
36                printf("EA ");
37        if (hello->hello_options.dc_bit)
38                printf("DC ");
39        printf("\n");
40
41        if (len < 8) 
42                return;
43
44        printf(" OSPF Hello: Priority %u ", hello->priority);
45       
46        if (len < 12) {
47                printf("\n");
48                return;
49        }
50
51        printf("Dead Interval %u\n", ntohl(hello->deadint));
52       
53        if (len < 16) 
54                return;
55
56        printf(" OSPF Hello: Designated Router %s\n", inet_ntoa(hello->designated));
57
58        if (len < 20)
59                return;
60
61        printf(" OSPF Hello: Backup Designated Router %s\n", inet_ntoa(hello->backup));
62
63        neigh = (struct in_addr *)(packet + sizeof(libtrace_ospf_hello_v2_t));
64        len -= sizeof(libtrace_ospf_hello_v2_t);
65        while (len >= 4) {
66                printf(" OSPF Hello: Neighbour %s\n", inet_ntoa(*neigh));
67                neigh++;
68                len -= sizeof(struct in_addr);
69        }
70
71
72
73        return;
74}
Note: See TracBrowser for help on using the repository browser.