aboutsummaryrefslogtreecommitdiff
path: root/xdp_manip.h
blob: 70eba28a9d8adb2de47487b3061e7a105a9ef241 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef XDP_MANIP_H
#define XDP_MANIP_H 1

#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/udp.h>

static __always_inline void swap_eth_addr(struct ethhdr *const ethhdr) {
  unsigned char src_eth[ETH_ALEN];

  __builtin_memcpy(src_eth, ethhdr->h_source, sizeof(ethhdr->h_source));
  __builtin_memcpy(ethhdr->h_source, ethhdr->h_dest, sizeof(ethhdr->h_source));
  __builtin_memcpy(ethhdr->h_dest, src_eth, sizeof(src_eth));
}

static __always_inline void swap_ip4_addr(struct iphdr *const iphdr) {
  __be32 src_ip = iphdr->saddr;
  iphdr->saddr = iphdr->daddr;
  iphdr->daddr = src_ip;
}

static __always_inline void swap_udp_port(struct udphdr *const udphdr) {
  __be16 src_port = udphdr->source;
  udphdr->source = udphdr->dest;
  udphdr->dest = src_port;
}

#endif