linux veth,veth pair讲解

虚拟网络设备--VETH pair

2015-05-29 12:05:39

分类: 网络与安全 原链接:http://blog.chinaunix.net/uid-27017686-id-5057025.html

Veth pair 是一对虚拟网卡,从一张veth网卡发出的数据包可以直接到达它的peer veth,两者之间存在着虚拟链路。

Veth 网卡和常规的以太网区别仅在于xmit接口(所有的网络设备驱动程序都必须有这个发送方法 发射 发送数据):将数据发送到其peer,触发peer的Rx 过程。

Veth 的原理示意图如下:

27017686_1432872227awl7.png

Veth 的实现在linux/drivers/net/veth.c 下,总体来看比较简单:

关键的数据结构:

点击(此处)折叠或打开

struct veth_priv {

struct net_device __rcu    *peer;

atomic64_t        dropped;

};

在初始化时veth_newlink 函数中有:

点击(此处)折叠或打开

/*

* tie the deviced together

*/

priv = netdev_priv(dev);

rcu_assign_pointer(priv->peer, peer);

priv = netdev_priv(peer);

rcu_assign_pointer(priv->peer, dev);

在发送函数veth_xmit中有:

点击(此处)折叠或打开

rcv = rcu_dereference(priv->peer);

...

if (likely(dev_forward_skb(rcv, skb) == NET_RX_SUCCESS)) {

struct pcpu_vstats *stats = this_cpu_ptr(dev->vstats);

u64_stats_update_begin(&stats->syncp);

stats->bytes += length;

stats->packets++;

u64_stats_update_end(&stats->syncp);

} else {

应用方式:通过net namespace 做实验如下:

点击(此处)折叠或打开

#!/bin/sh

echo "create net namespace net0 and net1"

ip netns add net0

ip netns add net1

echo "list net namespace"

ip netns list

echo "add veth pair v1 and vp1"

ip link add veth_0 type veth peer name veth_0_peer

ip link

echo "set veth_0 in net0"

ip link set veth_0 netns net0

echo "set veth_0_peer in net1"

ip link set veth_0_peer netns net1

ip netns exec net0 ip addr add local 10.0.78.3/24 dev veth_0

ip netns exec net0 ifconfig veth_0 up

ip netns exec net1 ip addr add local 10.0.78.4/24 dev veth_0_peer

ip netns exec net1 ifconfig veth_0_peer up

echo "show ip netns net0"

ip netns exec net0 ip addr

echo "show ip netns net1"

ip netns exec net1 ip addr

ip netns exec net1 ping 10.0.78.3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值