新建组网脚本
组网固定后,配置命令相应固定了,配置命令多且重复度高,遂提供脚本配置组网,脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
local_ip=172.16.1.1 remote_ip=172.16.1.2 tap_num=8 setup_vxlan(){ #add br-int ovs-vsctl add-br br-int -- set bridge br-int datapath_type=netdev ovs-vsctl add-port br-int vxlan0 -- set Interface vxlan0 type=vxlan options:local_ip="$local_ip" options:remote_ip="$remote_ip" #add br-ply for i in `seq 1 $tap_num` do ovs-vsctl add-br br-ply$i -- set bridge br-ply$i datapath_type=netdev ovs-vsctl add-port br-ply$i tap$i -- set Interface tap$i type=dpdkvhostuserclient options:vhost-server-path=/var/run/openvswitch/tap$i ovs-vsctl add-port br-ply$i p-tap$i-int -- set Interface p-tap$i-int type=patch options:peer=p-tap$i ovs-vsctl add-port br-int p-tap$i -- set Interface p-tap$i type=patch options:peer=p-tap$i-int done #add dpdkbond ovs-vsctl add-br br-dpdk -- set bridge br-dpdk datapath_type=netdev ovs-vsctl add-bond br-dpdk dpdk-bond p0 p1 -- set Interface p0 type=dpdk options:dpdk-devargs=0000:01:00.0,txq_mpw_en=1 options:n_rxq=8 \ -- set Interface p1 type=dpdk options:dpdk-devargs=0000:01:00.1,txq_mpw_en=1 options:n_rxq=8 ovs-vsctl set port dpdk-bond bond_mode=balance-tcp ovs-vsctl set port dpdk-bond lacp=active ifconfig br-dpdk "$local_ip"/24 up } get_ofport_by_name(){ local name=$1 local extra_filter="$2" [ -n "$extra_filter" ] && echo $(ovs-appctl dpif/show |grep $name |grep "$extra_filter" |cut -d '/' -f 1 |awk '{printf $2 "\n"}') [ -z "$extra_filter" ] && echo $(ovs-appctl dpif/show |grep $name |cut -d '/' -f 1 |awk '{printf $2 "\n"}') } ct(){ for i in `seq 1 $tap_num` do VM=$(get_ofport_by_name tap$i "dpdkvhostuserclient") PATCH_TAP_INT=$(get_ofport_by_name p-tap$i-int "(patch: peer=p-tap$i)") echo "setup_ct_$i: VM=$VM, PATCH_TAP_INT=$PATCH_TAP_INT" ovs-ofctl add-flow br-ply$i "arp,actions=normal" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$VM,ip,ct_state=-trk,actions=ct(table=0,zone=$i)" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$VM,ip,ct_state=+trk+new,ct_zone=$i,actions=ct(zone=$i,commit)$PATCH_TAP_INT" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$PATCH_TAP_INT,ip,ct_state=-trk,actions=ct(table=0,zone=$i)" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$PATCH_TAP_INT,ip,ct_state=+trk+new,ct_zone=$i,actions=ct(zone=$i,commit)$VM" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$VM,ip,ct_state=+est+trk,ct_zone=$i,actions=output:$PATCH_TAP_INT" ovs-ofctl add-flow br-ply$i "table=0,priority=50,in_port=$PATCH_TAP_INT,ip,ct_state=+est+trk,ct_zone=$i,actions=output:$VM" done } ct_clean(){ for i in `seq 1 $tap_num` do VM=$(get_ofport_by_name tap$i "dpdkvhostuserclient") PATCH_TAP_INT=$(get_ofport_by_name p-tap$i-int "(patch: peer=p-tap$i)") echo "clean_ct_$i: VM=$VM, PATCH_TAP_INT=$PATCH_TAP_INT" ovs-ofctl del-flows br-ply$i "arp" ovs-ofctl del-flows br-ply$i "table=0,in_port=$VM,ip,ct_state=-trk" ovs-ofctl del-flows br-ply$i "table=0,in_port=$VM,ip,ct_state=+trk+new,ct_zone=$i" ovs-ofctl del-flows br-ply$i "table=0,in_port=$PATCH_TAP_INT,ip,ct_state=-trk" ovs-ofctl del-flows br-ply$i "table=0,in_port=$PATCH_TAP_INT,ip,ct_state=+trk+new,ct_zone=$i" ovs-ofctl del-flows br-ply$i "table=0,in_port=$VM,ip,ct_state=+est+trk,ct_zone=$i" ovs-ofctl del-flows br-ply$i "table=0,in_port=$PATCH_TAP_INT,ip,ct_state=+est+trk,ct_zone=$i" done } clean(){ for i in `ovs-vsctl list-br` do ovs-vsctl del-br $i done } case $1 in clean) clean ;; setvxlan) setup_vxlan ;; ct) ct ;; ct_clean) ct_clean ;; *) ;; esac |
- 实例环境中,脚本被命名为topology_all.sh。
- Host2和Host1的脚本基本一致,但在配置Host2的脚本的时候需将local_ip和remote_ip值进行对换。
父主题: 配置组网