首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >networking-sfc deep dive 3

networking-sfc deep dive 3

作者头像
惠伟
发布于 2021-02-24 03:19:52
发布于 2021-02-24 03:19:52
1.3K00
代码可运行
举报
文章被收录于专栏:虚拟化笔记虚拟化笔记
运行总次数:0
代码可运行

惠伟:networking-sfc deep dive 2​zhuanlan.zhihu.com

上篇介绍MPLS封装流量的networking-sfc,这次介绍一下NSH,毕竟这才是主流,看看NSH的流表和报文格式,体验一下。

环境

修改代码

openstack stein版本的networking-sfc代码有bug。

  • encap(nsh)后外层默认的ethernet头src mac和dst mac都为空,需要设置一下,否则后续无法match或者认为是非法报文。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://man7.org/linux/man-pages/man7/ovs-actions.7.html
The encap(ethernet) variant encapsulate a bare L3 packet in an
       Ethernet frame. The Ethernet type is initialized to the L3 packet’s
       type, e.g. 0x0800 if the L3 packet is IPv4. The Ethernet source and
       destination are initially zeroed.


#不修改openvswitch内核模块报错
2019-12-26T09:39:54.560Z|05881|dpif(handler162)|WARN|system@ovs-system: failed to put[create] (Invalid argument) ufid:4f1aa182-ef16-4c52-b24e-52f6fd29cfd9 recirc_id(0x1f),dp_hash(0xc772ac0e/0xf),skb_priority(0/0),in_port(28),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),eth(src=fa:16:3e:43:c7:d0,dst=fa:16:e3:43:f3:43),eth_type(0x0800),ipv4(src=1.0.0.143/0.0.0.0,dst=2.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), actions:set(eth(dst=fa:16:3e:94:4a:b1)),push_nsh(flags=0,ttl=63,mdtype=1,np=3,spi=0x2,si=255,c1=0x0,c2=0x0,c3=0x0,c4=0x0),push_eth(src=fa:16:3e:43:c7:d0,dst=fa:16:3e:94:4a:b1),pop_eth,pop_nsh(),set(eth(src=fa:16:3e:43:c7:d0,dst=fa:16:3e:94:4a:b1)),recirc(0x6ad)
  • 另一个问题是decap nsh时设置了dst mac,但ovs报错了,decap时不需要设置,encap时内层dst mac已经修改过了。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#nsh table 10报错
openvswitch-agent.log:5718:2019-12-24 15:24:17.148 3652358 ERROR neutron.agent.common.ovs_lib [req-62f90557-d9f9-4a94-a081-db4cc021738c - - - - -] Unable to execute ['ovs-ofctl', 'add-flows', '-O', 'OpenFlow13', 'br-int', '-']. Exception: Exit code: 1; Stdin: hard_timeout=0,idle_timeout=0,priority=1,cookie=2103133625977426012,nsh_spi=2,nsh_mdtype=1,eth_type=35151,table=10,dl_dst=fa:16:3e:28:ca:68,dl_vlan=18,nsh_si=255,actions=strip_vlan,move:NXM_OF_ETH_DST->OXM_OF_PKT_REG0[0..47],decap(),decap(),move:OXM_OF_PKT_REG0[0..47]->NXM_OF_ETH_DST,output:226; 
Stdout: ; Stderr: 2019-12-24T07:24:17Z|00001|meta_flow|WARN|destination field eth_dst lacks correct prerequisites

我的代码修改如下:

Gerrit Code Review​review.opendev.org

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
huiwei@huiwei-l1 MINGW64 /d/src/openstack_community/networking-sfc ((8bee6b4...))
$ git diff
diff --git a/networking_sfc/services/sfc/agent/extensions/openvswitch/sfc_driver.py b/networking_sfc/services/sfc/agent/extensions/openvswitch/sfc_driver.py
index 563b3f5..7052612 100644
--- a/networking_sfc/services/sfc/agent/extensions/openvswitch/sfc_driver.py
+++ b/networking_sfc/services/sfc/agent/extensions/openvswitch/sfc_driver.py
@@ -415,10 +415,40 @@ class SfcOVSAgentDriver(sfc.SfcAgentDriver):
                 subnet_actions_list.append(across_flow)

                 if item['local_endpoint'] == self.local_ip:
-                    subnet_actions = 'resubmit(,%d)' % INGRESS_TABLE
+                    if flowrule['fwd_path']:
+                        subnet_actions = (
+                            'set_field:%s->eth_src,'
+                            'set_field:%s->eth_dst,'
+                            'resubmit(,%d)' %
+                            (self.br_int.get_vif_port_by_id(flowrule['egress']).vif_mac,
+                            item['in_mac_address'],
+                            INGRESS_TABLE))
+                    else:
+                        subnet_actions = (
+                            'set_field:%s->eth_src,'
+                            'set_field:%s->eth_dst,'
+                            'resubmit(,%d)' %
+                            (self.br_int.get_vif_port_by_id(flowrule['egress']).vif_mac,
+                            item['mac_address'],
+                            INGRESS_TABLE))
                 else:
                     # same subnet with next hop
-                    subnet_actions = 'output:%s' % self.patch_tun_ofport
+                    if flowrule['fwd_path']:
+                        subnet_actions = (
+                            'set_field:%s->eth_src,'
+                            'set_field:%s->eth_dst,'
+                            'output:%s' %
+                            (self.br_int.get_vif_port_by_id(flowrule['egress']).vif_mac,
+                            item['in_mac_address'],
+                            self.patch_tun_ofport))
+                    else:
+                        subnet_actions = (
+                            'set_field:%s->eth_src,'
+                            'set_field:%s->eth_dst,'
+                            'output:%s' %
+                            (self.br_int.get_vif_port_by_id(flowrule['egress']).vif_mac,
+                            item['mac_address'],
+                            self.patch_tun_ofport))
                 subnet_actions_list.append(subnet_actions)

                 eth_type = constants.ETH_TYPE_IP
@@ -615,9 +645,9 @@ class SfcOVSAgentDriver(sfc.SfcAgentDriver):
     def _build_proxy_sfc_nsh(self, flowrule, vif_port, vlan):
         match_field = self._build_ingress_match_field_sfc_nsh(
             flowrule, vif_port, vlan)
-        actions = ("strip_vlan,move:NXM_OF_ETH_DST->OXM_OF_PKT_REG0[0..47],"
+        actions = ("strip_vlan,"
                    "decap(),decap(),"
-                   "move:OXM_OF_PKT_REG0[0..47]->NXM_OF_ETH_DST,output:%s"
+                   "output:%s"
                    "" % vif_port.ofport)
         match_field['actions'] = actions
         return match_field

我用的openvswitch版本号是2.11.0,四个VM都在同一台处理机上报错了,还没太搞明白,参考了一下网上,简单修改了一下代码能运行了。

Re: [ovs-discuss] [SFC NSH] Update "eth dst" for original packet after decap nsh encapsulation packet.​www.mail-archive.com

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
huiwei@huiwei-l1 MINGW64 /d/src/ovs ((v2.11.0))
$ git diff
diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
index e5e469a84..956bb4f13 100644
--- a/datapath/flow_netlink.c
+++ b/datapath/flow_netlink.c
@@ -2670,7 +2670,13 @@ static int validate_set(const struct nlattr *a,
        if (key_type > OVS_KEY_ATTR_MAX ||
            !check_attr_len(key_len, ovs_key_lens[key_type].len))
                return -EINVAL;
-
+        /************************************************************/
+        if (key_len == 28) {
+            return 0;
+        } else if (key_type == OVS_KEY_ATTR_ETHERNET) {
+            mac_proto = MAC_PROTO_ETHERNET;
+        }
+        /************************************************************/
        if (masked && !validate_masked(nla_data(ovs_key), key_len))
                return -EINVAL;

@@ -3065,11 +3071,11 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
                case OVS_ACTION_ATTR_POP_NSH: {
                        __be16 inner_proto;

-                       if (eth_type != htons(ETH_P_NSH))
-                               return -EINVAL;
-                       inner_proto = tun_p_to_eth_p(key->nsh.base.np);
-                       if (!inner_proto)
-                               return -EINVAL;
+                       //if (eth_type != htons(ETH_P_NSH))
+                       //      return -EINVAL;
+                       //inner_proto = tun_p_to_eth_p(key->nsh.base.np);
+                       //if (!inner_proto)
+                       //      return -EINVAL;
                        if (key->nsh.base.np == TUN_P_ETHERNET)
                                mac_proto = MAC_PROTO_ETHERNET;
                        else
diff --git a/datapath/linux/compat/include/linux/static_key.h b/datapath/linux/compat/include/linux/static_key.h
index 01c6a93f0..142c72945 100644
--- a/datapath/linux/compat/include/linux/static_key.h
+++ b/datapath/linux/compat/include/linux/static_key.h
@@ -1,6 +1,6 @@
 #ifndef _STATIC_KEY_WRAPPER_H
 #define _STATIC_KEY_WRAPPER_H
-
+#include <asm/atomic.h>
 #include_next <linux/static_key.h>
 #ifndef HAVE_UPSTREAM_STATIC_KEY
 /*Re: [ovs-discuss] [SFC NSH] Update "eth dst" for original packet after decap nsh encapsulation packet.huiwei@huiwei-l1 MINGW64 /d/src/ovs ((v2.11.0))
$ git diff
diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
index e5e469a84..956bb4f13 100644
--- a/datapath/flow_netlink.c
+++ b/datapath/flow_netlink.c
@@ -2670,7 +2670,13 @@ static int validate_set(const struct nlattr *a,
        if (key_type > OVS_KEY_ATTR_MAX ||
            !check_attr_len(key_len, ovs_key_lens[key_type].len))
                return -EINVAL;
-
+        /************************************************************/
+        if (key_len == 28) {
+            return 0;
+        } else if (key_type == OVS_KEY_ATTR_ETHERNET) {
+            mac_proto = MAC_PROTO_ETHERNET;
+        }
+        /************************************************************/
        if (masked && !validate_masked(nla_data(ovs_key), key_len))
                return -EINVAL;

@@ -3065,11 +3071,11 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
                case OVS_ACTION_ATTR_POP_NSH: {
                        __be16 inner_proto;

-                       if (eth_type != htons(ETH_P_NSH))
-                               return -EINVAL;
-                       inner_proto = tun_p_to_eth_p(key->nsh.base.np);
-                       if (!inner_proto)
-                               return -EINVAL;
+                       //if (eth_type != htons(ETH_P_NSH))
+                       //      return -EINVAL;
+                       //inner_proto = tun_p_to_eth_p(key->nsh.base.np);
+                       //if (!inner_proto)
+                       //      return -EINVAL;
                        if (key->nsh.base.np == TUN_P_ETHERNET)
                                mac_proto = MAC_PROTO_ETHERNET;
                        else
diff --git a/datapath/linux/compat/include/linux/static_key.h b/datapath/linux/compat/include/linux/static_key.h
index 01c6a93f0..142c72945 100644
--- a/datapath/linux/compat/include/linux/static_key.h
+++ b/datapath/linux/compat/include/linux/static_key.h
@@ -1,6 +1,6 @@
 #ifndef _STATIC_KEY_WRAPPER_H
 #define _STATIC_KEY_WRAPPER_H
-
+#include <asm/atomic.h>
 #include_next <linux/static_key.h>
 #ifndef HAVE_UPSTREAM_STATIC_KEY
 /*

修改后要编译和重新加载openvswitch.ko

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make
make modules_install
modprobe tunnel6
ovs-dpctl del-dp ovs-system
rmmod vport_vxlan
rmmod openvswitch
modprobe openvswitch
systemctl restart openvswitch
systemctl restart neutron-openvswitch-agent

命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openstack subnet create --network sfc-net-test1 --subnet-range 1.0.0.0/24 sfc-subnet-test1
openstack subnet create --network sfc-net-test2 --subnet-range 2.0.0.0/24 sfc-subnet-test2

openstack port create --network sfc-net-test1 --enable --no-security-group --disable-port-security sfc-port-p1
openstack port create --network sfc-net-test1 --enable --no-security-group --disable-port-security sfc-port-p2
openstack port create --network sfc-net-test1 --enable --no-security-group --disable-port-security sfc-port-p4

openstack port create --network sfc-net-test2 --enable --no-security-group --disable-port-security sfc-port-p3
openstack port create --network sfc-net-test2 --enable --no-security-group --disable-port-security sfc-port-p5
openstack port create --network sfc-net-test2 --enable --no-security-group --disable-port-security sfc-port-p6

openstack server create --image centos7-hw --flavor centos7-flavor --port sfc-port-p1 sfc-src
openstack server create --image centos7-hw --flavor centos7-flavor --port sfc-port-p2 --port sfc-port-p3 sfc-sf1
openstack server create --image centos7-hw --flavor centos7-flavor --port sfc-port-p4 --port sfc-port-p5 sfc-sf2
openstack server create --image centos7-hw --flavor centos7-flavor --port sfc-port-p6 sfc-dst

openstack sfc port pair create --ingress sfc-port-p2 --egress sfc-port-p3 --service-function-parameters correlation=None,weight=1 port-pair-1
openstack sfc port pair create --ingress sfc-port-p4 --egress sfc-port-p5 --service-function-parameters correlation=None,weight=2 port-pair-2

openstack sfc port pair group create  --port-pair port-pair-1  --port-pair port-pair-2 --port-pair-group-parameters lb-fields=ip_dst port-pair-group-1

openstack sfc flow classifier create --source-ip-prefix 1.0.0.0/24 --destination-ip-prefix 2.0.0.0/24 --logical-source-port sfc-port-p1 --logical-destination-port sfc-port-p6 sfc-flow-classifier-1
openstack sfc port chain create --chain-parameters correlation=nsh,symmetric=true --flow-classifier sfc-flow-classifier-1 --port-pair-group port-pair-group-1 sfc-port-chain-1

流表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#nsh整体流表
[root@test25g05 /home/huiwei]# ovs-ofctl dump-flows -O OpenFlow13 br-int
cookie=0x12870a3164aefc04, duration=303.984s, table=0, n_packets=0, n_bytes=0, priority=65535,vlan_tci=0x0fff/0x1fff actions=drop
cookie=0x3a35346be9d7bfe8, duration=291.764s, table=0, n_packets=268, n_bytes=26264, priority=30,ip,in_port="qvo327f1f20-19",nw_src=1.0.0.0/24,nw_dst=2.0.0.0/24 actions=group:3
cookie=0x3a35346be9d7bfe8, duration=289.832s, table=0, n_packets=141, n_bytes=13818, priority=30,ip,in_port="qvo44589e56-db",nw_src=2.0.0.0/24,nw_dst=1.0.0.0/24 actions=group:7003
cookie=0x3a35346be9d7bfe8, duration=281.836s, table=0, n_packets=0, n_bytes=0, priority=30,ip,in_port="qvo5a5a289f-68",nw_src=2.0.0.0/24,nw_dst=1.0.0.0/24 actions=NORMAL
cookie=0x3a35346be9d7bfe8, duration=281.735s, table=0, n_packets=559, n_bytes=54782, priority=30,ip,in_port="qvof309fd48-14",nw_src=1.0.0.0/24,nw_dst=2.0.0.0/24 actions=NORMAL
cookie=0x3a35346be9d7bfe8, duration=278.092s, table=0, n_packets=16, n_bytes=1568, priority=30,ip,in_port="qvo82826950-34",nw_src=2.0.0.0/24,nw_dst=1.0.0.0/24 actions=NORMAL
cookie=0x3a35346be9d7bfe8, duration=277.987s, table=0, n_packets=0, n_bytes=0, priority=30,ip,in_port="qvoa72eb67c-36",nw_src=1.0.0.0/24,nw_dst=2.0.0.0/24 actions=NORMAL
cookie=0x3a35346be9d7bfe8, duration=302.622s, table=0, n_packets=0, n_bytes=0, priority=20,mpls actions=goto_table:10
cookie=0x3a35346be9d7bfe8, duration=302.619s, table=0, n_packets=0, n_bytes=0, priority=20,dl_type=0x894f actions=goto_table:10

#NSH encap

cookie=0x3a35346be9d7bfe8, duration=291.908s, table=5, n_packets=772, n_bytes=75656, priority=0,ip,dl_dst=fa:16:3e:94:4a:b1 actions=encap(nsh),set_field:0x2->nsh_spi,set_field:255->nsh_si,encap(ethernet),push_vlan:0x8100,set_field:4112->vlan_vid,set_field:fa:16:3e:43:c7:d0->eth_src,set_field:fa:16:3e:94:4a:b1->eth_dst,resubmit(,10)
cookie=0x3a35346be9d7bfe8, duration=291.870s, table=5, n_packets=0, n_bytes=0, priority=0,ip,dl_dst=fa:16:3e:4b:5c:85 actions=encap(nsh),set_field:0x2->nsh_spi,set_field:255->nsh_si,encap(ethernet),push_vlan:0x8100,set_field:4112->vlan_vid,set_field:fa:16:3e:43:c7:d0->eth_src,set_field:fa:16:3e:4b:5c:85->eth_dst,resubmit(,10)
cookie=0x3a35346be9d7bfe8, duration=289.975s, table=5, n_packets=559, n_bytes=54782, priority=0,ip,dl_dst=fa:16:3e:28:ca:68 actions=encap(nsh),set_field:0x2->nsh_spi,set_field:255->nsh_si,encap(ethernet),push_vlan:0x8100,set_field:4114->vlan_vid,set_field:fa:16:3e:f8:63:19->eth_src,set_field:fa:16:3e:28:ca:68->eth_dst,resubmit(,10)
cookie=0x3a35346be9d7bfe8, duration=289.938s, table=5, n_packets=0, n_bytes=0, priority=0,ip,dl_dst=fa:16:3e:6b:0d:53 actions=encap(nsh),set_field:0x2->nsh_spi,set_field:255->nsh_si,encap(ethernet),push_vlan:0x8100,set_field:4114->vlan_vid,set_field:fa:16:3e:f8:63:19->eth_src,set_field:fa:16:3e:6b:0d:53->eth_dst,resubmit(,10)

#NSH decap

cookie=0x3a35346be9d7bfe8, duration=281.789s, table=10, n_packets=0, n_bytes=0, priority=1,dl_vlan=18,dl_dst=fa:16:3e:6b:0d:53 actions=pop_vlan,decap(),decap(),output:"qvof309fd48-14"
cookie=0x3a35346be9d7bfe8, duration=281.688s, table=10, n_packets=1315, n_bytes=128870, priority=1,dl_vlan=16,dl_dst=fa:16:3e:94:4a:b1 actions=pop_vlan,decap(),decap(),output:"qvo5a5a289f-68"
cookie=0x3a35346be9d7bfe8, duration=278.043s, table=10, n_packets=141, n_bytes=13818, priority=1,dl_vlan=18,dl_dst=fa:16:3e:28:ca:68 actions=pop_vlan,decap(),decap(),output:"qvoa72eb67c-36"
cookie=0x3a35346be9d7bfe8, duration=277.942s, table=10, n_packets=0, n_bytes=0, priority=1,dl_vlan=16,dl_dst=fa:16:3e:4b:5c:85 actions=pop_vlan,decap(),decap(),output:"qvo82826950-34"
cookie=0x3a35346be9d7bfe8, duration=302.617s, table=10, n_packets=741, n_bytes=72618, priority=0 actions=drop

#做SF1SF2LB

[root@test25g05 /home/huiwei]# ovs-ofctl dump-groups -O OpenFlow13 br-int
OFPST_GROUP_DESC reply (OF1.3) (xid=0x2):
group_id=3,type=select,bucket=actions=set_field:fa:16:3e:94:4a:b1->eth_dst,resubmit(,5),bucket=actions=set_field:fa:16:3e:4b:5c:85->eth_dst,resubmit(,5)
group_id=7003,type=select,bucket=actions=set_field:fa:16:3e:28:ca:68->eth_dst,resubmit(,5),bucket=actions=set_field:fa:16:3e:6b:0d:53->eth_dst,resubmit(,5)

问题

  • restart openvswitch报错
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
重启openvswitch报错,update_port_chain和update_network先后问题
1979:2019-12-24 17:03:39.703 3746024 ERROR neutron.agent.common.ovs_lib [req-6d0f9605-0ece-4d07-bc04-e6d9daa3bf1b - - - - -] Unable to execute ['ovs-ofctl', 'add-flows', '-O', 'OpenFlow13', 'br-int', '-']. Exception: Exit code: 1; Stdin: hard_timeout=0,idle_timeout=0,priority=1,cookie=17912164061049090790,nsh_spi=2,nsh_mdtype=1,eth_type=35151,table=10,dl_dst=fa:16:3e:28:ca:68,dl_vlan=None,nsh_si=255,actions=strip_vlan,move:NXM_OF_ETH_DST->OXM_OF_PKT_REG0[0..47],decap(),decap(),move:OXM_OF_PKT_REG0[0..47]->NXM_OF_ETH_DST,output:226; Stdout: ; Stderr: ovs-ofctl: -:1: None: bad syntax for dl_vlan value
  • live migration后流表不对
  • 看流表要指定openflow版本号
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@test25g05 /home/huiwei]# ovs-ofctl dump-flows br-int
2019-12-02T09:07:48Z|00001|ofp_actions|WARN|unknown OpenFlow10 action for vendor 0x2320 and type 46
2019-12-02T09:07:48Z|00002|ofp_actions|WARN|bad action at offset 0 (OFPBAC_BAD_VENDOR_TYPE):
00000000 ff ff 00 10 00 00 23 20-00 2e 00 00 00 01 89 4f
00000010 ff ff 00 18 00 00 23 20-00 21 ff ff 08 08 00 5a
00000020 d6 50 00 00 00 02 00 00-ff ff 00 18 00 00 23 20
00000030 00 21 ff ff 0a 05 00 5a-d6 50 ff 00 00 00 00 00
00000040 ff ff 00 10 00 00 23 20-00 2e 00 00 00 00 00 00
00000050 ff ff 00 10 00 00 23 20-00 28 00 00 00 00 00 03
2019-12-02T09:07:48Z|00003|ofp_flow|WARN|OFPST_FLOW reply bad instructions
2019-12-02T09:07:48Z|00004|vconn|WARN|parse error in reply (OFPBAC_BAD_VENDOR_TYPE)
ovs-ofctl: dump flows (Protocol error)
解决办法:
ovs-ofctl -O OpenFlow13 dump-flows br-int

总结

正常情况下通用,异常情况问题比较多,回退考虑不周全,需要社区投入人力修改,欢迎大家参与。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OVN实践
#控制节点会运行三个ovs-dbserver,原先的ovs-db, ovn-south-db, ovn-north-db
惠伟
2021/02/24
1.5K0
OVN实践
networking-sfc deep dive 2
网络连接是这样的,三个VM分布在HOST5,另二个VM分布在HOST6上,流量要从sfc-src到sfc-dst。
惠伟
2021/02/24
9040
networking-sfc deep dive 2
OpenStack Neutron中的DVR简介与OVS流表分析
本文主要介绍DVR的概念,比较了DVR和非DVR情况下,数据在network节点上的流量变化。同时也介绍了在OpenStack里面如何配置DVR,比较详细地介绍了在DVR激活的情况下,数据包的流表情况
SDNLAB
2018/04/03
2.8K0
OpenStack Neutron中的DVR简介与OVS流表分析
networking-sfc deep dive 4
前面的文章介绍的流量路径比较简单,就是一条chain,从头走到尾巴,最多LB一下tap一下。有些需求是把一条chain的流量分叉到不同chain或者把不同chain上的流量合并到一条chain上,上networking-sfc中叫做service graph,这儿简单介绍一下。
惠伟
2021/02/24
4920
networking-sfc deep dive 4
15-GRE与VXLAN网络
公网机里的局域网是10.100.0.0/24,有一个公网ip,通过公网ip进行上网;
小朋友呢
2020/01/03
2.8K1
15-GRE与VXLAN网络
理解Neutron(4):Neutron OVS OpenFlow 流表 和 L2 Population
特别说明:本文于2015年基于OpenStack M版本发表于本人博客,现转发到公众号。因为时间关系,本文部分内容可能已过时甚至不正确,请注意。
SammyLiu
2019/06/28
2.1K0
理解Neutron(4):Neutron OVS OpenFlow 流表 和 L2 Population
OVS流表分析方法总结(超实用)
流表的阅读可以分为两个部分:匹配和动作。匹配是指在一堆流表中找到包所走的那条流表,动作是指这个包接下来的操作。
爱努力的Max
2022/02/18
4.2K2
OVS流表分析方法总结(超实用)
SDN在云数据中心的应用之VPC产品篇
云数据中心最基础的网络产品就是VPC(虚拟私有云),简单理解就是1个三层路由+若干个IP地址可自定义的网络。一个VPC可允许有多个子网,同子网内部二层互通,不同子网间三层互通。用户在云数据中心订购了一
SDNLAB
2018/03/29
1.2K0
openstack tap as a service深入研究
惠伟:openstack tap as a service浅尝辄止​zhuanlan.zhihu.com
惠伟
2021/02/24
5440
openstack tap as a service深入研究
openflow group和openvswitch实现原理
惠伟:openflow group实现vip主主模式​zhuanlan.zhihu.com
惠伟
2021/02/24
1.9K0
SDN实战团分享(十二):Service Function Chain
我今天主要介绍一下SFC,主要内容是英文的,用中文做解释,大概介绍一些SFC的概念,主要的时间会放在demo上。 What's SFC Service Function Chaining provides the ability to define an ordered list of a network services (e.g. firewalls, load balancers). These service are then "stitched" together in the network t
SDNLAB
2018/04/03
9940
SDN实战团分享(十二):Service Function Chain
openstack tap as a service浅尝辄止
openstack taas(tap as a service)可以用来做流量镜像,ovs bridge也可以用来做镜像,但只能是同个bridge上的port, taas可以把openstack上一些port的流量镜像到一个port上,不管这些port bind到哪些host,它是用万能的ovs流表来搞定的。
惠伟
2021/02/24
9270
openflow group实现vip主主模式
租户创建vpc,租户创建虚拟机,租户创建数据库实现,返回访问的vip,vip主主模式,vip流量尽量负载均衡,同一session保持到固定的LB节点,而且虚拟机迁移时到vip不断流,迁移这个session还保持在同一个LB节点,要求租户流程隔离,LB运行于物理机,LB节点可扩展,后面是k8s pod,数据库实例运行于k8s pod中。
惠伟
2021/02/24
1.4K0
openflow group实现vip主主模式
从CNI到OVN
诸如calico flannel等CNI实现,通过牺牲一些功能让网络复杂度得以大幅度降低是我极其推崇的,在云原生时代应用不再关心基础设施的场景下是一个明智之举,给网络调错带来了极大方便。
sealyun
2019/07/25
1.6K0
【每日播报】OpenDaylight与Mininet应用实战之复杂网络验证(五)
1 多交换机的测试 Mininet中本身就支持多交换机网络拓扑的模拟创建,可通过Python API自定义拓扑创建满足使用者在仿真过程中的多方位需求。 下面举出具体示例验证多交换机支持: sudo m
SDNLAB
2018/03/28
1.1K0
【每日播报】OpenDaylight与Mininet应用实战之复杂网络验证(五)
openvswitch group hash实现代码分析
https://zhuanlan.zhihu.com/p/273536550​zhuanlan.zhihu.com
惠伟
2021/02/24
1.2K0
openvswitch group hash实现代码分析
openvswitch 配置acl
ovs-ofctl add-flow br0 dl_src=52:54:00:aa:bb:cc,tp_dst=80,idle_timeout=0,actions=normal
力哥聊运维与云计算
2019/06/28
2.3K0
networking-sfc deep dive 1
SFC全称service function chain,RFC 7665 Service Function Chaining (SFC) Architecture对SFC的体系做了很详细的介绍。end to end流量中间要有序经过firewall,NAT,IDS等网络功能单元,对这些网络功能的定义和管理,以及指导流量如何有序经过这些网络功能单元就是SFC。为什么现在需要SFC,是因为以前firewall,NAT,IDS等网络功能单元是实体物理设备,它的部署位置是和网络拓扑强相关的,所有流量共享这些设备,而且流量经过这些设备的序列是固定死的,总结是不够灵活,而SFC可以自定义网络功能单元,自定义流量路径,很好给云计算网络提供了支撑。
惠伟
2021/02/24
6690
networking-sfc deep dive 1
OpenDaylight与Mininet应用实战之流表操作三
本文简要介绍在虚拟机环境下,主要目的是对Open vSwitch下发的流表操作,通过OpenDaylight与Mininet熟悉添加、删除流表的命令及设备通信的原理。 1 流表作用 在SDN环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理。控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包。我们可以通过对流表操作来控制交换机的转发行为。下面简单介绍一下流表的基本操作。 2 环境准备 参考本专题
SDNLAB
2018/03/28
1.9K0
OpenDaylight与Mininet应用实战之流表操作三
SDNLAB群分享(四):利用ODL下发流表创建VxLAN网络
今天想跟大家分享如何通过ODL控制器下发流表来创建VxLAN网络。ODL作为当前流行的控制器,已经有广泛的应用。基于ODL提供了丰富的北向接口,使得应用对网络有了更好的掌控。我们为什么需要研究VxLAN网络,VxLAN网络现在已经成为多数据中心网络的解决方案,提供丰富的网络功能,比如更多的租户数量、虚拟机迁移、IP冲突等问题得到有效解决。 一.实验目的 通过本次分享,你将会了解到以下内容: 构建VxLAN网络的基本步骤。 Mininet构建网络拓扑。 ODL北向接口Restconf的使用。 XML格式的流表
SDNLAB
2018/04/02
1.6K0
SDNLAB群分享(四):利用ODL下发流表创建VxLAN网络
相关推荐
OVN实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档