Изменить внешний IP-заголовок инкапсулированных пакетов GENEVE.Linux

Ответить
Anonymous
 Изменить внешний IP-заголовок инкапсулированных пакетов GENEVE.

Сообщение Anonymous »


В моем проекте я хочу вставить параметр временной метки во внешний IP-заголовок инкапсулированного пакета GENEVE. Я попробовал использовать программу BPF, которая была подключена к выходному крючку TC женевского vport OVS. Моя программа BPF приведена ниже, но она вставляет поле параметра во внутренний заголовок IP. Итак, у меня 2 вопроса:
[*]Можно ли использовать BPF для вставки параметра IP во внешний заголовок IP? [*]Если это возможно, как это сделать? #include #include #include #include #ifndef __section # определить __section(NAME) \ __attribute__((раздел(ИМЯ), использовано)) #endif #ifndef __inline # определить __inline \ встроенный __attribute__((всегда_в строке)) #endif #ifndef lock_xadd # определить lock_xadd(ptr, val) \ ((void)__sync_fetch_and_add(ptr, val)) #endif #ifndef BPF_FUNC # определить BPF_FUNC(NAME, ...) \ (*NAME)(__VA_ARGS__) = (void *)BPF_FUNC_##NAME #endif #define OPT_LEN 4 #define IP_HDL 20 static int BPF_FUNC(skb_adjust_room, struct __sk_buff *skb, __s32 len_diff, режим __u32, флаги __u64); //static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto, uint16_t vlan_tci); __section("выход") int push_tun_opt(struct __sk_buff *skb) { структура ethhdr *eth; структура iphdr *iph; __be32 *опт; летучая пустота *data, *data_end; INT РЕТ = TC_ACT_OK; //skb_vlan_push(skb,0x8100,0x1); skb_adjust_room(skb, size(OPT_LEN), BPF_ADJ_ROOM_NET, BPF_F_ADJ_ROOM_ENCAP_L3_IPV4); данные = (недействительные *) (длинные) skb-> данные; data_end = (void *) (long)skb-> data_end; eth = (недействительные *) данные; iph = (void *)(eth+1); opt = (void *)(iph+1); if ((void *)(opt+1) > data_end) выйти; *опт = 0x1234abcd; вне: вернуть возврат; } char __license[] __section("лицензия") = "GPL";
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»