免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2384 | 回复: 1
打印 上一主题 下一主题

关于内核模块发包问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-23 13:59 |只看该作者 |倒序浏览
sock_register注册了一个新的family, 想实现一个简单的send,此时可以知道source and destibation IP address, 可是不知道destination的MAC.
想仿造packet_send()和arp_send()写,可是前者的destination MAC是用户传进来的, 后者要么是广播地址要么就是从arp_rcv()中可以得到该值。

我的send只要像packet_send那样就可以了,加一点自己的数据,由eth_header()构造好ethernet head直接发

怎么样很简单的由destination IP address得到MAC呢?难道内核发包只能用kernel_sendmsg()发UDP包吗?

还有是不是只要得到skb->dst也可以交给网卡驱动直接发送了。

请大虾讲讲过程,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-10-31 00:00 |只看该作者
TCP发包看下ip_queue_xmit这个函数;

UDP是这一段
ip_oute_output:
        if (connected)
                rt = (struct rtable*)sk_dst_check(sk, 0); =====>>检查sock的sk_dst_cache是否保存路由;
if (rt == NULL) {                                                                       ====》》然后自己填参数查路由高速缓存
                struct flowi fl = { .oif = ipc.oif,
                                    .nl_u = { .ip4_u =
                                              { .daddr = faddr,
                                                .saddr = saddr,
                                                .tos = tos } },
                                    .proto = IPPROTO_UDP,
                                    .uli_u = { .ports =
                                               { .sport = inet->sport,
                                                 .dport = dport } } };
                err = ip_route_output_flow(&rt, &fl, sk, !(msg->msg_flags&MSG_DONTWAIT
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP