Я написал код eBPF для расчета разницы во времени между пакетом в двух точках трассировки: net_dev_queue и net_dev_xmit. Чтобы сгенерировать ключ, мне нужно извлечь IP-адрес из данных с помощью структуры трассировки_event_raw_net_dev_template. При извлечении IP-адреса он всегда равен 0.0.0.0. Следуя коду, который я использую. Могу ли я узнать, что мне не хватает?
Спасибо
struct flow_key
{
__be32 src_ip;
__be32 dst_ip;
__u16 src_port;
__u16 dst_port;
__u8 protocol;
};
static __always_inline int parse_flow_key(struct sk_buff *skb, struct flow_key *key)
{
struct iphdr iph;
bpf_probe_read(&iph, sizeof(struct iphdr), skb->data);
if (skb->protocol != bpf_htons(ETH_P_IP)) {
// This is not an IP packet
bpf_printk("Not an IP packet 0x%xn", skb->protocol);
return -1;
}
key->src_ip = iph.saddr;
key->dst_ip = iph.daddr;
key->protocol = iph.protocol;
bpf_printk(" %pI4 -> %pI4 ", iph.saddr, iph.daddr);
// More code
}
SEC("tracepoint/net/net_dev_queue")
int tp_ingress_kernel(struct trace_event_raw_net_dev_template *ctx)
{
struct sk_buff skb;
bpf_probe_read(&skb, sizeof(skb), ctx->skbaddr);
struct flow_key key = {};
if (parse_flow_key(&skb, &key) < 0)
return 0;
bpf_printk("Packet received in kernel\n");
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ip-address
Трассировка eBPF в сети: net_dev_queue не предоставляет правильный IP-адрес ⇐ Linux
1721831340
Anonymous
Я написал код eBPF для расчета разницы во времени между пакетом в двух точках трассировки: net_dev_queue и net_dev_xmit. Чтобы сгенерировать ключ, мне нужно извлечь IP-адрес из данных с помощью структуры трассировки_event_raw_net_dev_template. При извлечении IP-адреса он всегда равен 0.0.0.0. Следуя коду, который я использую. Могу ли я узнать, что мне не хватает?
Спасибо
struct flow_key
{
__be32 src_ip;
__be32 dst_ip;
__u16 src_port;
__u16 dst_port;
__u8 protocol;
};
static __always_inline int parse_flow_key(struct sk_buff *skb, struct flow_key *key)
{
struct iphdr iph;
bpf_probe_read(&iph, sizeof(struct iphdr), skb->data);
if (skb->protocol != bpf_htons(ETH_P_IP)) {
// This is not an IP packet
bpf_printk("Not an IP packet 0x%xn", skb->protocol);
return -1;
}
key->src_ip = iph.saddr;
key->dst_ip = iph.daddr;
key->protocol = iph.protocol;
bpf_printk(" %pI4 -> %pI4 ", iph.saddr, iph.daddr);
// More code
}
SEC("tracepoint/net/net_dev_queue")
int tp_ingress_kernel(struct trace_event_raw_net_dev_template *ctx)
{
struct sk_buff skb;
bpf_probe_read(&skb, sizeof(skb), ctx->skbaddr);
struct flow_key key = {};
if (parse_flow_key(&skb, &key) < 0)
return 0;
bpf_printk("Packet received in kernel\n");
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78788991/ebpf-trace-at-netnet-dev-queue-not-providing-correct-ip-address[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия