source: libpacketdump/ospf2_1000.c @ 756b8f9

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 756b8f9 was e224862, checked in by Shane Alcock <salcock@…>, 10 years ago
  • Added libpacketdump decoders for a large portion of OSPF v2
  • 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/* Decoder for an LSA header */
9
10DLLEXPORT void decode(int link_type UNUSED,const char *packet,unsigned len) {
11
12        libtrace_ospf_lsa_v2_t *lsa = (libtrace_ospf_lsa_v2_t *)packet;
13
14        if (len < 2)
15                return;
16        printf(" OSPF LSA: Age %u ", ntohs(lsa->age)); 
17
18        if (len < 3)
19                return;
20        printf("Options ");
21
22        if (lsa->lsa_options.e_bit)
23                printf("E ");
24        if (lsa->lsa_options.mc_bit)
25                printf("MC ");
26        if (lsa->lsa_options.np_bit)
27                printf("N/P ");
28        if (lsa->lsa_options.ea_bit)
29                printf("EA ");
30        if (lsa->lsa_options.dc_bit)
31                printf("DC ");
32        printf("\n");
33
34        if (len < 4)
35                return;
36        printf(" OSPF LSA: LS Type %u ", lsa->lsa_type);
37        switch(lsa->lsa_type) {
38                case 1:
39                        printf("(Router LSA)\n");
40                        break;
41                case 2:
42                        printf("(Network LSA)\n");
43                        break;
44                case 3:
45                        printf("(Summary LSA - IP)\n");
46                        break;
47                case 4:
48                        printf("(Summary LSA - ASBR)\n");
49                        break;
50                case 5:
51                        printf("(AS External LSA)\n");
52                        break;
53                default:
54                        printf("(Unknown)\n");
55        }
56       
57        if (len < 8)
58                return;
59       
60        printf(" OSPF LSA: Link State ID %s ", inet_ntoa(lsa->ls_id));
61
62        if (len < 12) {
63                printf("\n");
64                return;
65        }
66
67        printf("Advertising Router %s\n", inet_ntoa(lsa->adv_router));
68
69        if (len < 16)
70                return;
71
72        printf(" OSPF LSA: Seq %u ", ntohl(lsa->seq));
73
74        if (len < 18) {
75                printf("\n");
76                return;
77        }
78
79        printf("Checksum %u ", ntohs(lsa->checksum));
80
81        if (len < 20) {
82                printf("\n");
83                return;
84        }
85
86        printf("Length %u \n", ntohs(lsa->length));
87}
Note: See TracBrowser for help on using the repository browser.