OpenvSwitchにおけるポートの抽象的な階層構造


OpenvSwitchにおけるポートの抽象的な階層構造の理解
      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