赞
踩
socket的几种里面常见的2种。
------历史-------
AF_NET最早生出,后来有了AF_PACKET。
----结束历史-------
AF_NET常见。
AF_PACKET=PF_PACKET, 使用在kernel中 net/af_packet.c
http://lxr.free-electrons.com/source/net/packet/af_packet.c
PF_PACKET有3种类型,是SOCK_RAW和SOCK_DGRAM, SOCK_PACKET
SOCK_RAW 带MAC报文头(TCP/IP栈中,14个字节=目的MAC+源MAC+类型(0x0806,IP))
SOCK_DGRAM不带二层头
在上面的连接中,针对SOCK_DGRAM的socket,底层处理就是加上包头再发送
static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
if (sock->type == SOCK_DGRAM) {
offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);
对于SOCK_DGRAM的socket, 底层处理就是对收到的包剥掉包头再叫上层处理
static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
if (sk->sk_type == SOCK_DGRAM) {
macoff = netoff = TPACKET_ALIGN(po->tp_hdrlen) + 16 +
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。