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 * VXLAN header, draft-mahalingam-dutt-dcops-vxlan-03 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| Reserved | 3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | VXLAN Network Identifier (VNI) | Reserved | 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrallvxlan_print(const u_char *bp, u_int len) 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t flags; 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int32_t vni; 4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (len < 8) { 5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("[|VXLAN]"); 5153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall flags = *bp; 5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += 4; 5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall vni = EXTRACT_24BITS(bp); 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall bp += 4; 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("VXLAN, "); 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("flags [", stdout); 6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (flags & 0x08) 6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("I", stdout); 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall else 6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs(".", stdout); 6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall fputs("] ", stdout); 6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("(0x%02x), ", flags); 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("vni %u\n", vni); 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ether_print(gndo, bp, len - 8, len - 8, NULL, NULL); 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 75