drop_monitor + dropwatch定位Linux网络丢包

linux协议栈中提供了一个trace kfree_skb的驱动drop_monitor,通过register_trace_kfree_skb注册trace回调,这样在kfree_skb的时候将丢包的地址传给drop_monitor,drop_monitor再将丢包的地址通过netlink传给应用程序dropwatch。

操作篇

1、将kernel的drop_monitor.c编译成模块ko;
2、系统启动后加载驱动insmod drop_monitor.ko
3、将dropwatch编译成可执行程序后,运行dropwatch,输入start后启动monitor;
4、获得丢包的地址后,通过addr2line查找对于的代码位置;

原理篇

kernel部分

1、首先需要向genl family中注册server端,常见的netlink family有NETLINK_GENERIC,NETLINK_ROUTE,NETLINK_KOBJECT_UEVENT等。

genl_register_family_with_ops(&net_drop_monitor_family,
                       dropmon_ops,
                       ARRAY_SIZE(dropmon_ops));
static struct genl_family net_drop_monitor_family = {
    .id             = GENL_ID_GENERATE,
    .hdrsize        = 0,
    .name           = "NET_DM",
    .version        = 2,
    .maxattr        = NET_DM_CMD_MAX,
};

2、申请空的genl message实体:

sk_buff *skb = genlmsg_new(al, GFP_KERNEL);//申请一个genl message
genlmsg_put(skb, 0, 0, &net_drop_monitor_family,
        0, NET_DM_CM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值