网卡驱动3-做一个与外界交互的虚拟网卡2(调用真实网卡发送数据)

之前说我我加入一个自己的协议,现在说一下我的协议的意思是每个数据包前加一个32位的数据,前16位是协议号,即ETH_IP_VNIC;

后16位的高八位是’w’(我的姓的第一字母),低八位是虚拟网卡号。所以VNIC_HLEN是4。可以看一下结构体struct vnic_ethhdr

/**
 *	struct vnic_ethhdr - vnic ethernet header (ethhdr + vnic_hdr)
 *	@h_dest: destination ethernet address
 *	@h_source: source ethernet address
 *	@h_vnic_proto: ethernet protocol (always ETH_P_VNIC)
 */
struct vnic_ethhdr {
	unsigned char	h_dest[ETH_ALEN];
	unsigned char	h_source[ETH_ALEN];
	__be16		h_vnic_proto;
	__be16		h_vnic_data;
};

//vnic_put_tag主要是构建我的vnic头
static inline struct sk_buff *vnic_put_tag(struct sk_buff *skb, u16 vnic_data)
{
	struct vnic_ethhdr *beth;

        //skb_cow_head是看skb是否有足够的余量来装入vnic头,不够会重新分配。
	if (skb_cow_head(skb, VNIC_HLEN) < 0) 
        {  
		kfree_skb(skb);
		return NULL;
	}
        //skb_push之后会skb->data -= len;beth = skb->data;
	b
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值