summaryrefslogtreecommitdiff
path: root/print-olsr.c
diff options
context:
space:
mode:
authorhannes <hannes>2008-08-16 11:23:09 +0000
committerhannes <hannes>2008-08-16 11:23:09 +0000
commitc695e7fee4bca70a7a0ab7991b9395e0041daa66 (patch)
treeac0f985d6733a70e7403c735878609bf0bedfc61 /print-olsr.c
parent770e8dca2d459bebe30bec71609766a78add0beb (diff)
downloadtcpdump-c695e7fee4bca70a7a0ab7991b9395e0041daa66.tar.gz
add support for the nameservice plugin messages generated by www.olsr.org
Diffstat (limited to 'print-olsr.c')
-rw-r--r--print-olsr.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/print-olsr.c b/print-olsr.c
index 174a51ea..54709b76 100644
--- a/print-olsr.c
+++ b/print-olsr.c
@@ -215,6 +215,7 @@ olsr_print (const u_char *pptr, u_int length)
} ptr;
u_int msg_type, msg_len, msg_tlen, hello_len, prefix;
+ u_int16_t name_entries, name_entry_type, name_entry_len;
u_int8_t link_type, neighbor_type;
const u_char *tptr, *msg_data;
@@ -369,13 +370,43 @@ olsr_print (const u_char *pptr, u_int length)
}
break;
+ case OLSR_NAMESERVICE_MSG:
+ name_entries = EXTRACT_16BITS(msg_data+2);
+ printf("\n\t Version %u, Entries %u",
+ EXTRACT_16BITS(msg_data), name_entries);
+ msg_data += 4;
+ msg_tlen -= 4;
+
+ while (name_entries && msg_tlen) {
+
+ name_entry_type = EXTRACT_16BITS(msg_data);
+ name_entry_len = EXTRACT_16BITS(msg_data+2);
+ msg_data += 4;
+ msg_tlen -= 4;
+
+ printf("\n\t #%u Name Entry, length %u",
+ name_entry_type,
+ name_entry_len);
+
+ printf(", originator %s", ipaddr_string(msg_data));
+
+ /* 32-bit alignement */
+ if (name_entry_len%4 != 0)
+ name_entry_len+=4-(name_entry_len%4);
+
+
+ msg_data += name_entry_len;
+ msg_tlen -= name_entry_len;
+
+ name_entries--;
+ }
+ break;
+
/*
* FIXME those are the defined messages that lack a decoder
* you are welcome to contribute code ;-)
*/
-
case OLSR_POWERINFO_MSG:
- case OLSR_NAMESERVICE_MSG:
default:
print_unknown_data(msg_data, "\n\t ", msg_tlen);
break;