diff options
author | hannes <hannes> | 2008-08-16 11:23:09 +0000 |
---|---|---|
committer | hannes <hannes> | 2008-08-16 11:23:09 +0000 |
commit | c695e7fee4bca70a7a0ab7991b9395e0041daa66 (patch) | |
tree | ac0f985d6733a70e7403c735878609bf0bedfc61 /print-olsr.c | |
parent | 770e8dca2d459bebe30bec71609766a78add0beb (diff) | |
download | tcpdump-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.c | 35 |
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; |