summaryrefslogtreecommitdiffhomepage
path: root/docs/sources
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sources')
-rw-r--r--docs/sources/evpn.md71
1 files changed, 71 insertions, 0 deletions
diff --git a/docs/sources/evpn.md b/docs/sources/evpn.md
index ab53fea1..db139231 100644
--- a/docs/sources/evpn.md
+++ b/docs/sources/evpn.md
@@ -12,6 +12,8 @@ still very experimental.
- [Inclusive Multicast Ethernet Tag Route](#inclusive-multicast-ethernet-tag-route)
- [Ethernet Segment Route](#ethernet-segment-route)
- [IP Prefix Route](#ip-prefix-route)
+- [Reference](#reference)
+ - [Router's MAC Option](#routers-mac-option)
- [BaGPipe](#bagpipe)
- [Configuration](#configuration)
- [Advertising EVPN route](#advertising-evpn-route)
@@ -237,6 +239,75 @@ $ gobgp global rib -a evpn prefix
$ gobgp global rib -a evpn del prefix 10.0.0.0/24 172.16.0.1 esi MSTP aa:aa:aa:aa:aa:aa 100 etag 200 label 300 rd 1.1.1.1:65000
```
+## Reference
+
+### Router's MAC Option
+
+The `router-mac` option in `gobgp` CLI allows sending Router's
+MAC Extended Community via BGP EVPN Type 2 and Type 5 advertisements.
+
+As explained in below RFC draft, this community is used to carry the
+MAC address of the VTEP where MAC-IP pair resides.
+
+For example, GoBGP router (R1) peers with Cisco router (R2).
+R1 is used by an orchestraction platform, e.g. OpenStack, Docker Swarm,
+etc., to advertise container MAC-IP bindings. When R1 advertises the
+binding it also sets next hop for the route as the host where the MAC-IP
+binding (i.e. container) resides. When R2 receives the route, it will
+not install it unless Router's MAC Extended Community is present. R2
+will use the MAC address in the community to create an entry in MAC
+address table of R2 pointint to NVE interface.
+
+```bash
+gobgp global rib -a evpn add macadv e9:72:d7:aa:1f:b4 \
+ 172.16.100.100 etag 0 label 34567 rd 10.1.1.1:100 \
+ rt 65001:100 encap vxlan nexthop 10.10.10.10 \
+ origin igp router-mac e9:72:d7:aa:1f:b4
+
+gobgp global rib -a evpn add nexthop 10.10.10.10 origin igp \
+ prefix 172.16.100.100/32 esi 0 etag 0 rd 10.1.1.1:100 \
+ rt 65001:100 gw 10.10.10.10 label 34567 encap vxlan \
+ router-mac e9:72:d7:aa:1f:b4
+```
+
+In the above example, a host with IP of `10.10.10.10` runs a
+container connected to an Open vSwitch instance. The container's IP
+address is `172.16.100.100` and MAC address `e9:72:d7:aa:1f:b4`.
+The Open vSwitch is VTEP with `tunnel_key=34567`, i.e. VNID `34567`.
+
+GoBGP (R1) and Cisco (R2) routers are in BGP AS 65001. R1's IP is
+`10.1.1.1`. R2 used RT of `65001:100` to import routes and place
+them into appropriate VRF. In this case the VRF is associated with
+L2VNI from VLAN 300. Upon the receipt of the above BGP EVPN
+Type 2 and Type 5 routes, R2 will create create a MAC address
+entry pointing to it's NVE interface with destination IP address
+of `10.10.10.10`.
+
+```bash
+Legend:
+ * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
+ age - seconds since last seen,+ - primary entry using vPC Peer-Link,
+ (T) - True, (F) - False, C - ControlPlane MAC
+ VLAN MAC Address Type age Secure NTFY Ports
+---------+-----------------+--------+---------+------+----+------------------
+* 300 e972.d7aa.1fb4 static - F F nve1(10.10.10.10)
+```
+
+The R2 will use the `router-mac e9:72:d7:aa:1f:b4` as the destination MAC
+address of the inner VXLAN packet. For example, an underlay host `20.20.20.20`
+ping the container. The inner VXLAN L2 destination address is
+`e9:72:d7:aa:1f:b4`. The inner VXLAN L2 source address is R2's MAC. The outer
+VXLAN L3 source address, i.e. `10.2.2.2` is R2' NVE address.
+
+```bash
+OUTER VXLAN L2: 10:20:08:d0:ff:23 > b2:0e:19:6a:8d:51
+OUTER VXLAN L3: 10.2.2.2.45532 > 10.10.10.10.4789: VXLAN, flags [I] (0x08), vni 34567
+INNER VXLAN L2: 4e:f4:ca:aa:f6:7b > e9:72:d7:aa:1f:b4
+INNER VXLAN L3: 20.20.20.20 > 172.16.100.100: ICMP echo reply, id 66, seq 1267, length 64
+```
+
+See also: [Integrated Routing and Bridging in EVPN](https://tools.ietf.org/html/draft-ietf-bess-evpn-inter-subnet-forwarding-03#section-6.1)
+
## BaGPipe
This example uses [BaGPipe](https://github.com/openstack/networking-bagpipe). GoBGP receives