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