OpenvSwitchにおけるポートの抽象的な階層構造
1662 ワード
OpenvSwitchにおけるポートの抽象的な階層構造の理解
struct vportは、OVSにおけるdatapath層の各ポートを抽象的に示し、ovにおける各種データ構造をPortに関連付けることにより、構造体netdev_vportとは、vportと最下層のリアルなネットワークデバイス構造である.
netdeviceの入り口で、キーデータ構造は以下の通りです.
struct vportは、OVSにおけるdatapath層の各ポートを抽象的に示し、ovにおける各種データ構造をPortに関連付けることにより、構造体netdev_vportとは、vportと最下層のリアルなネットワークデバイス構造である.
netdeviceの入り口で、キーデータ構造は以下の通りです.
struct vport {
struct rcu_head rcu; //RCU callback head for deferred destruction.
u16 port_no; // dp ports ;
struct datapath *dp; // datapath;
struct kobject kobj; // Represents /sys/class/net/<devname>/brport
char linkname[IFNAMSIZ];
u32 upcall_portid; // netlink port ;
struct hlist_node hash_node; // vport.c dev_table ;
struct hlist_node dp_hash_node; // datapath->ports , vport ;
const struct vport_ops *ops; // , vport ( );
struct vport_percpu_stats __percpu *percpu_stats; // CPU ;
spinlock_t stats_lock; // , ;
struct vport_err_stats err_stats; // ;
struct ovs_vport_stats offset_stats; // ;
};
/***
* 。
*/
struct netdev_vport {
struct rcu_head rcu; // read copy update
struct net_device *dev;//
};
では、どのようにしてvportから具体的な設備にアクセスしますか?ovas実装では、vportのプライベート記憶領域に対応するnetdev_を格納している.vportは、必要な時に直接に入手することができます.方法は以下の通りです./**
* vport_priv - vport
* create vport sizeof(struct netdev_vport),
* vport netdev_vport , 。
*/
static inline void *vport_priv(const struct vport *vport)
{
return (u8 *)vport + ALIGN(sizeof(struct vport), VPORT_ALIGN);
}
転載は出典を明記する:http://blog.csdn.net/vonzhoufz/article/details/39317547