153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Redistribution and use in source and binary forms, with or without 353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * modification, are permitted provided that: (1) source code 453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * distributions retain the above copyright notice and this paragraph 553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * in its entirety, and (2) distributions including binary code include 653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the above copyright notice and this paragraph in its entirety in 753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the documentation or other materials provided with the distribution. 853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * THIS SOFTWARE IS PROVIDED ``AS IS'' AND 953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT 1053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 1153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * FOR A PARTICULAR PURPOSE. 1253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com) 1453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 1553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 1653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_CONFIG_H 1753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "config.h" 1853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 1953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <tcpdump-stdinc.h> 2153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdio.h> 2353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdlib.h> 2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "interface.h" 2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "extract.h" 2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "addrtoname.h" 2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "udp.h" 3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * OTV header, draft-hasmit-otv-04 3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 3453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 3553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * |R|R|R|R|I|R|R|R| Overlay ID | 3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Instance ID | Reserved | 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrallotv_print(const u_char *bp, u_int len) 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t flags; 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t overlay_id; 4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t instance_id; 4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (len < 8) { 5153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("[|OTV]"); 5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall flags = *bp; 5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += 1; 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall overlay_id = EXTRACT_24BITS(bp); 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += 3; 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall instance_id = EXTRACT_24BITS(bp); 6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += 4; 6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("OTV, "); 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("flags [", stdout); 6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (flags & 0x08) 6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("I", stdout); 6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs(".", stdout); 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("] ", stdout); 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("(0x%02x), ", flags); 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("overlay %u, ", overlay_id); 7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("instance %u\n", instance_id); 7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall ether_print(gndo, bp, len - 8, len - 8, NULL, NULL); 7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 7953f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 80