SlideShare a Scribd company logo
VyOS VXLAN and Linux Device Driver 
VyOSのVXLANとLinuxのデバドラの話 
2014/11/2 
VyOS users meeting #2 
Ryo Nakamura 
upa@haeena.net
Virtual eXtensible LAN 
• An Ethernet over IP overlay. RFC7348. 
– Ethernet frame is encapsulated in IP + UDP + VXLAN headers. 
– VXLAN header contains 24bit Virtual Network Identifier (VNI) field. 2^24 L2 
segments can be multiplexed in one VXLAN overlay network domain. 
– Unicast traffic is encapsulated in IP Unicast. 
– BUM traffic is encapsulated in IP Multicast. 
• Multicast based VTEP learning is described in RFC, Sec 4. 
– Many vendors propose and use their original control planes. 
– Of course, I know that Multicast is difficult in actual environments, but they don’t 
have INTEROPERBILITY :( 
2
Multicast based VTEP learning 
OuterIP Src A 
OuterIP Dst M 
SrcMAC : 1 
DstMAC : FF 
VTEP:A 
VTEP:B 
Node:1 VTEP:D 
VTEP:C 
Node:3 
Node:4 
Node:2 
Node 1 send arp request Node 4 
3 
Node 1 is in 
VTEP A !!
Multicast based VTEP learning 
VTEP:A 
VTEP:B 
Node:1 VTEP:D 
VTEP:C 
Node:4 
Node:2 
OuterIP Src D 
OuterIP Dst A 
SrcMAC : 4 
DstMAC : 1 
Node 4 send arp reply to Node 1 
4 Node:3 
Node 4 is in 
VTEP D !! 
Node 1 is in 
VTEP A !!
VyOS VXLAN support 
• 2014/9/20, merged. 
5
Linux kernel version issue 
• Linux VXLAN Driver is appeared in kernel 3.7 
– 2012/9/24, first patch was contributed to netdev. 
– I was really looking forward to Vyatta Core with 
kernel 3.7 and later. 
• Kernel version of VyOS Helium is 3.13.11 !! 
– HooooooooOOOO!!! WrrrrryyyyyyYYYYYYYYYY !!!!!!!! 
– Hydrogen is kernel 3.3 
6
VyOS VXLAN CLI 
• Under the interfaces section 
– set interfaces vxlan vxlan0 
– set interfaces vxlan vxlan0 group 239.0.0.1 
– set interfaces vxlan vxlan0 vni 0 
– and basic interface operations 
• IPv4/v6 routing 
• bridge-group 
• policy 
interfaces { 
vxlan vxlan0 { 
group 239.0.0.1 
vni 0 
} 
} 7
Operation example 
interfaces { 
vxlan vxlan0 { 
address 172.16.0.1/24 
group 239.0.0.10 
ip { 
ospf { 
cost 10 
} 
} 
vni 0 
} 
} 
protocols { 
ospf { 
area 0 { 
network 172.16.0.0/24 
} 
} 
} 
8
Operation example 
vyos@vyos:~$ show interfaces vxlan vxlan0 
vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UNKNOWN group default 
link/ether b2:74:c9:fa:1d:fd brd ff:ff:ff:ff:ff:ff 
inet 172.16.0.1/24 brd 172.16.0.255 scope global vxlan0 
valid_lft forever preferred_lft forever 
inet6 fe80::b074:c9ff:fefa:1dfd/64 scope link 
valid_lft forever preferred_lft forever 
RX: bytes packets errors dropped overrun mcast 
0 0 0 0 0 0 
TX: bytes packets errors dropped carrier collisions 
2446 25 0 0 0 0 
9
Operation example 
vyos@vyos:~$ show ip ospf interface vxlan0 
vxlan0 is up 
ifindex 3, MTU 1500 bytes, BW 0 Kbit <UP,BROADCAST,RUNNING,MULTICAST> 
Internet Address 172.16.0.1/24, Broadcast 172.16.0.255, Area 0.0.0.0 
MTU mismatch detection:enabled 
Router ID 10.10.20.189, Network Type BROADCAST, Cost: 10 
Transmit Delay is 1 sec, State DR, Priority 1 
Designated Router (ID) 10.10.20.189, Interface Address 172.16.0.1 
No backup designated router on this network 
Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters 
Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 
Hello due in 7.900s 
Neighbor Count is 0, Adjacent neighbor count is 0 
10
node.def 
• VXLAN interface name 
– Different number from VNI can be used to an interface 
name. But, I think it is really confusing :( 
val_help: <vxlanN>; VXLAN interface name 
syntax:expression: pattern $VAR(@) "vxlan[0-9]+$" 
11
node.def (cont’d) 
• REQUIRED 
– A vxlan overlay network is identified by VNI. 
– Multicast Group Address is required to encapsulate BUM Traffic 
in IP Multicast. 
Group Address can be reused for other VNI. 
commit:expression: $VAR(./group/) != "";  
"Must configure vxlan group for $VAR(@)" 
commit:expression: $VAR(./vni/) != "";  
"Must configure vxlan vni for $VAR(@)“ 
12
node.def (cont’d) 
• create interface 
VXLAN_VNI="id $VAR(./vni/@)" 
VXLAN_GROUP="group $VAR(./group/@)" 
VXLAN_TTL="ttl 16" 
if [ ! $VAR(./link/) == "" ]; then 
VXLAN_DEV="dev $VAR(./link/@)" 
fi 
ip link add name $VAR(@) type vxlan  
$VXLAN_VNI $VXLAN_GROUP $VXLAN_TTL $VXLAN_DEV 
ip link set $VAR(@) up 
touch /tmp/vxlan-$VAR(@)-create 
skimped 
work... 
underlay 
device 
And, 
execute 
iproute2 
13
Change vni or group of existing 
vxlan interfaces 
• Sorry, it is not supported. 
• Changing group or vni requires delete and 
re-create the vxlan interface. 
14
VXLAN in Linux 
• ip link add type vxlan 
– Pseudo ethernet interface : vxlanX 
– Interfaces are connected to each vxlan overlay network corresponding to a VNI 
(vxlan_dev and FDB / VNI) 
– Namespace is supported 
struct net_device 
Linux Kernel 
netif_rx(skb) 
vxlan1 
FDB 
vxlan0 
FDB 
kernel udp socket 
udp_sk(sk)->encap_rcv = 
vxlan_udp_encap_recv 
iptunnel_xmit() 
15
How to specify attributes 
• ip link add type vxlan id 0 group X 
– Netlink API : An API to communicate to Kernel 
– NETLINK_ROUTE, NETLINK_NETFILTER and more 
Linux Kernel 
Userland Application 
Netlink Socket 
socket(AF_NETLINK, SOCK_RAW, netlink_family) 
Inter 
face 
routing 
table 
Netfilter 
struct nlmsghdr 
and rtattr etc 
16
How to specify attributes (cont’d) 
• ip link add type vxlan id 0 group X 
– RTNETLINK : routing socket 
• RTM_NEWLINK message is sent with attributes related to 
VXLAN (see man ip-link) 
int do_iplink(int argc, char **argv) 
{ 
if (argc > 0) { if (iplink_have_newlink()) { 
if (matches(*argv, "add") == 0) 
return iplink_modify(RTM_NEWLINK, 
NLM_F_CREATE|NLM_F_EXCL, 
argc-1, argv+1); 
iproute2 package is a 
good text book of 
Netlink !! 
17
Attributes of vlxan interface 
• id : Virtual Network Identifier 
• dev : Uunderlay device (in VyOS, link) 
• group : Multicast group address 
• remote : An unicast IP address of VTEP for BUM traffic 
• local : Source IP address of encapsulated packet 
• ttl : TTL of encapsulated packet 
• port : Source port range of encapsulated packet 
But, these attributes can be only specified 
when a pseudo interface is created !! 
18
How to specify attributes (cont’d) 
• VXLAN driver kernel-source/drivers/net/vxlan.c 
– RTM messages are processed by rtnl_link_ops 
static struct rtnl_link_ops vxlan_link_ops __read_mostly = { 
.kind = "vxlan", 
.maxtype = IFLA_VXLAN_MAX, 
.policy = vxlan_policy, 
.priv_size = sizeof(struct vxlan_dev), 
.setup = vxlan_setup, 
.validate = vxlan_validate, 
.newlink = vxlan_newlink, 
.dellink = vxlan_dellink, 
.get_size = vxlan_get_size, 
.fill_info = vxlan_fill_info, 
}; 
vxlan_newlink () is called 
when RTM_NEWLINK 
is received 
19
vxlan_newlink () 
• Codes can not be pasted... too long... 
1. Parse attributes 
2. Set up parsed parameters to vxlan_dev 
3. register_netdeivce 
20
And, you can see vxlan0 
asano2:/home/upa % ifconfig vxlan0 
vxlan0 Link encap:Ethernet HWaddr 02:0a:1e:ad:7f:31 
inet6 addr: fe80::a:1eff:fead:7f31/64 Scope:Link 
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B) TX bytes:690 (690.0 B) 
asano2:/home/upa % ip -d link show dev vxlan0 
9: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UNKNOWN mode DEFAULT group default 
link/ether 02:0a:1e:ad:7f:31 brd ff:ff:ff:ff:ff:ff promiscuity 0 
vxlan id 0 group 239.0.0.1 srcport 32768 61000 dstport 8472 ageing 300 
asano2:/home/upa % bridge fdb show dev vxlan0 
00:00:00:00:00:00 dst 239.0.0.1 self permanent 
21
As a result 
• vxlan parameters can not be changed after 
pseudo interface is created. 
• Do you have good ideas ? 
– I have just only one idea. 
• Use Generic Netlink like l2tp driver 
• Generic Netlink is a mechanism to add user defined 
netlink family dynamically. 
• It requires patches to vxlan driver and iproute2... 
22
Future work ? 
• Change destination port ? 
– Default is 8472 (OTV). 4789 is assigned for VXLAN by IANA 
– It can be changed through module_param. 
But it requires rmmod/insmod when port is changed. 
Of course, all pseudo interfaces are removed... 
• Support “remote” attribute 
– Easy. Is it needed for the community ? 
23
Overlay is the Only Way!! 
Thanks! 
upa@haeena.net 
24

More Related Content

PDF
Open vSwitch - Stateful Connection Tracking & Stateful NAT
Thomas Graf
 
PDF
MySQL Group Replication - Ready For Production? (2018-04)
Kenny Gryp
 
PDF
MariaDB 제품 소개
NeoClova
 
PDF
Redis persistence in practice
Eugene Fidelin
 
PDF
Mastering PostgreSQL Administration
EDB
 
PPTX
An Introduction to MongoDB Ops Manager
MongoDB
 
PPTX
Schema-on-Read vs Schema-on-Write
Amr Awadallah
 
PPTX
Implementation &amp; Comparison Of Rdma Over Ethernet
James Wernicke
 
Open vSwitch - Stateful Connection Tracking & Stateful NAT
Thomas Graf
 
MySQL Group Replication - Ready For Production? (2018-04)
Kenny Gryp
 
MariaDB 제품 소개
NeoClova
 
Redis persistence in practice
Eugene Fidelin
 
Mastering PostgreSQL Administration
EDB
 
An Introduction to MongoDB Ops Manager
MongoDB
 
Schema-on-Read vs Schema-on-Write
Amr Awadallah
 
Implementation &amp; Comparison Of Rdma Over Ethernet
James Wernicke
 

What's hot (20)

PDF
redis 소개자료 - 네오클로바
NeoClova
 
PDF
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
Kenny Gryp
 
PPTX
SAS vs SATA_ The Key Differences That You Should Know.pptx
calltutors
 
PDF
cassandra
Akash R
 
PPT
Introduction to redis
Tanu Siwag
 
PDF
MariaDB 마이그레이션 - 네오클로바
NeoClova
 
PDF
MySQL Database Architectures - 2020-10
Kenny Gryp
 
PDF
MariaDB 10.11 key features overview for DBAs
Federico Razzoli
 
PDF
MariaDB MaxScale
MariaDB plc
 
PDF
Using all of the high availability options in MariaDB
MariaDB plc
 
PDF
Cilium - Fast IPv6 Container Networking with BPF and XDP
Thomas Graf
 
PPTX
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Maria Colgan
 
PDF
Understanding Open vSwitch
YongKi Kim
 
PDF
Maxscale_메뉴얼
NeoClova
 
PDF
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra
 
PPTX
Redis introduction
Federico Daniel Colombo Gennarelli
 
ODP
Elasticsearch for beginners
Neil Baker
 
PPT
Red hat linux 9 ppt2003
ashishsjcit
 
PPT
Memcache
Abhinav Singh
 
PPTX
Running MariaDB in multiple data centers
MariaDB plc
 
redis 소개자료 - 네오클로바
NeoClova
 
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
Kenny Gryp
 
SAS vs SATA_ The Key Differences That You Should Know.pptx
calltutors
 
cassandra
Akash R
 
Introduction to redis
Tanu Siwag
 
MariaDB 마이그레이션 - 네오클로바
NeoClova
 
MySQL Database Architectures - 2020-10
Kenny Gryp
 
MariaDB 10.11 key features overview for DBAs
Federico Razzoli
 
MariaDB MaxScale
MariaDB plc
 
Using all of the high availability options in MariaDB
MariaDB plc
 
Cilium - Fast IPv6 Container Networking with BPF and XDP
Thomas Graf
 
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Maria Colgan
 
Understanding Open vSwitch
YongKi Kim
 
Maxscale_메뉴얼
NeoClova
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra
 
Elasticsearch for beginners
Neil Baker
 
Red hat linux 9 ppt2003
ashishsjcit
 
Memcache
Abhinav Singh
 
Running MariaDB in multiple data centers
MariaDB plc
 
Ad

Viewers also liked (6)

PDF
2014 jaws days-最強のawsに_rtc宮崎
SachieMiyazaki
 
PDF
DynamoDBのまえにキャッシュおく奴
Sugawara Genki
 
PPTX
What makes AWS invincible? from JAWS Days 2014
Emma Haruka Iwao
 
PDF
Measurement of Maximum new NAT-sessions per second / How to send packets
@ otsuka752
 
PDF
VPC by Default時代のアクセス制御
真吾 吉田
 
PDF
Kauli SSPにおけるVyOSの導入事例
Kazuhito Ohkawa
 
2014 jaws days-最強のawsに_rtc宮崎
SachieMiyazaki
 
DynamoDBのまえにキャッシュおく奴
Sugawara Genki
 
What makes AWS invincible? from JAWS Days 2014
Emma Haruka Iwao
 
Measurement of Maximum new NAT-sessions per second / How to send packets
@ otsuka752
 
VPC by Default時代のアクセス制御
真吾 吉田
 
Kauli SSPにおけるVyOSの導入事例
Kazuhito Ohkawa
 
Ad

Similar to VyOS Users Meeting #2, VyOSのVXLANの話 (20)

PDF
OpenNebulaConf 2016 - Networking, NFVs and SDNs Hands-on Workshop by Rubén S....
OpenNebula Project
 
PPTX
Deep Dive in Docker Overlay Networks
Laurent Bernaille
 
PDF
VXLAN BGP EVPN: Technology Building Blocks
APNIC
 
PDF
Linux Networking Explained
Thomas Graf
 
PDF
Xpress path vxlan_bgp_evpn_appricot2019-v2_
Jide Akintola JNCIE-M&T/SP #496 CCIE-SP#28552
 
PPTX
Deeper dive in Docker Overlay Networks
Laurent Bernaille
 
PDF
OpenShift v3 Internal networking details
Etsuji Nakai
 
PDF
Open stack advanced_part
lilliput12
 
PDF
Implementing an IPv6 Enabled Environment for a Public Cloud Tenant
Shixiong Shang
 
PPTX
Meetup docker using software defined networks
OCTO Technology
 
PPTX
Docker networking basics & coupling with Software Defined Networks
Adrien Blind
 
PDF
20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN
Indonesia Network Operators Group
 
PPTX
VXLAN Distributed Service Node
David Lapsley
 
PPTX
Vxlan deep dive session rev0.5 final
KwonSun Bae
 
PDF
Deep Dive in Docker Overlay Networks - Laurent Bernaille - Architect, D2SI
Docker, Inc.
 
PPTX
DCUS17 : Docker networking deep dive
Madhu Venugopal
 
PDF
VLANs in the Linux Kernel
Kernel TLV
 
PDF
Open stack networking_101_part-2_tech_deep_dive
yfauser
 
PPTX
PLNOG16: VXLAN Gateway, efektywny sposób połączenia świata wirtualnego z fizy...
PROIDEA
 
OpenNebulaConf 2016 - Networking, NFVs and SDNs Hands-on Workshop by Rubén S....
OpenNebula Project
 
Deep Dive in Docker Overlay Networks
Laurent Bernaille
 
VXLAN BGP EVPN: Technology Building Blocks
APNIC
 
Linux Networking Explained
Thomas Graf
 
Xpress path vxlan_bgp_evpn_appricot2019-v2_
Jide Akintola JNCIE-M&T/SP #496 CCIE-SP#28552
 
Deeper dive in Docker Overlay Networks
Laurent Bernaille
 
OpenShift v3 Internal networking details
Etsuji Nakai
 
Open stack advanced_part
lilliput12
 
Implementing an IPv6 Enabled Environment for a Public Cloud Tenant
Shixiong Shang
 
Meetup docker using software defined networks
OCTO Technology
 
Docker networking basics & coupling with Software Defined Networks
Adrien Blind
 
20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN
Indonesia Network Operators Group
 
VXLAN Distributed Service Node
David Lapsley
 
Vxlan deep dive session rev0.5 final
KwonSun Bae
 
Deep Dive in Docker Overlay Networks - Laurent Bernaille - Architect, D2SI
Docker, Inc.
 
DCUS17 : Docker networking deep dive
Madhu Venugopal
 
VLANs in the Linux Kernel
Kernel TLV
 
Open stack networking_101_part-2_tech_deep_dive
yfauser
 
PLNOG16: VXLAN Gateway, efektywny sposób połączenia świata wirtualnego z fizy...
PROIDEA
 

Recently uploaded (20)

PDF
Exploring AI Agents in Process Industries
amoreira6
 
PDF
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
PPTX
Web Testing.pptx528278vshbuqffqhhqiwnwuq
studylike474
 
PDF
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
DOCX
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
PDF
Summary Of Odoo 18.1 to 18.4 : The Way For Odoo 19
CandidRoot Solutions Private Limited
 
PPTX
Explanation about Structures in C language.pptx
Veeral Rathod
 
PDF
Immersive experiences: what Pharo users do!
ESUG
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PPTX
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
PDF
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
PPT
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PPTX
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
PDF
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
PDF
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PDF
Bandai Playdia The Book - David Glotz
BluePanther6
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
Exploring AI Agents in Process Industries
amoreira6
 
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
Web Testing.pptx528278vshbuqffqhhqiwnwuq
studylike474
 
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
Summary Of Odoo 18.1 to 18.4 : The Way For Odoo 19
CandidRoot Solutions Private Limited
 
Explanation about Structures in C language.pptx
Veeral Rathod
 
Immersive experiences: what Pharo users do!
ESUG
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
Bandai Playdia The Book - David Glotz
BluePanther6
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 

VyOS Users Meeting #2, VyOSのVXLANの話

  • 1. VyOS VXLAN and Linux Device Driver VyOSのVXLANとLinuxのデバドラの話 2014/11/2 VyOS users meeting #2 Ryo Nakamura [email protected]
  • 2. Virtual eXtensible LAN • An Ethernet over IP overlay. RFC7348. – Ethernet frame is encapsulated in IP + UDP + VXLAN headers. – VXLAN header contains 24bit Virtual Network Identifier (VNI) field. 2^24 L2 segments can be multiplexed in one VXLAN overlay network domain. – Unicast traffic is encapsulated in IP Unicast. – BUM traffic is encapsulated in IP Multicast. • Multicast based VTEP learning is described in RFC, Sec 4. – Many vendors propose and use their original control planes. – Of course, I know that Multicast is difficult in actual environments, but they don’t have INTEROPERBILITY :( 2
  • 3. Multicast based VTEP learning OuterIP Src A OuterIP Dst M SrcMAC : 1 DstMAC : FF VTEP:A VTEP:B Node:1 VTEP:D VTEP:C Node:3 Node:4 Node:2 Node 1 send arp request Node 4 3 Node 1 is in VTEP A !!
  • 4. Multicast based VTEP learning VTEP:A VTEP:B Node:1 VTEP:D VTEP:C Node:4 Node:2 OuterIP Src D OuterIP Dst A SrcMAC : 4 DstMAC : 1 Node 4 send arp reply to Node 1 4 Node:3 Node 4 is in VTEP D !! Node 1 is in VTEP A !!
  • 5. VyOS VXLAN support • 2014/9/20, merged. 5
  • 6. Linux kernel version issue • Linux VXLAN Driver is appeared in kernel 3.7 – 2012/9/24, first patch was contributed to netdev. – I was really looking forward to Vyatta Core with kernel 3.7 and later. • Kernel version of VyOS Helium is 3.13.11 !! – HooooooooOOOO!!! WrrrrryyyyyyYYYYYYYYYY !!!!!!!! – Hydrogen is kernel 3.3 6
  • 7. VyOS VXLAN CLI • Under the interfaces section – set interfaces vxlan vxlan0 – set interfaces vxlan vxlan0 group 239.0.0.1 – set interfaces vxlan vxlan0 vni 0 – and basic interface operations • IPv4/v6 routing • bridge-group • policy interfaces { vxlan vxlan0 { group 239.0.0.1 vni 0 } } 7
  • 8. Operation example interfaces { vxlan vxlan0 { address 172.16.0.1/24 group 239.0.0.10 ip { ospf { cost 10 } } vni 0 } } protocols { ospf { area 0 { network 172.16.0.0/24 } } } 8
  • 9. Operation example vyos@vyos:~$ show interfaces vxlan vxlan0 vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/ether b2:74:c9:fa:1d:fd brd ff:ff:ff:ff:ff:ff inet 172.16.0.1/24 brd 172.16.0.255 scope global vxlan0 valid_lft forever preferred_lft forever inet6 fe80::b074:c9ff:fefa:1dfd/64 scope link valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collisions 2446 25 0 0 0 0 9
  • 10. Operation example vyos@vyos:~$ show ip ospf interface vxlan0 vxlan0 is up ifindex 3, MTU 1500 bytes, BW 0 Kbit <UP,BROADCAST,RUNNING,MULTICAST> Internet Address 172.16.0.1/24, Broadcast 172.16.0.255, Area 0.0.0.0 MTU mismatch detection:enabled Router ID 10.10.20.189, Network Type BROADCAST, Cost: 10 Transmit Delay is 1 sec, State DR, Priority 1 Designated Router (ID) 10.10.20.189, Interface Address 172.16.0.1 No backup designated router on this network Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 7.900s Neighbor Count is 0, Adjacent neighbor count is 0 10
  • 11. node.def • VXLAN interface name – Different number from VNI can be used to an interface name. But, I think it is really confusing :( val_help: <vxlanN>; VXLAN interface name syntax:expression: pattern $VAR(@) "vxlan[0-9]+$" 11
  • 12. node.def (cont’d) • REQUIRED – A vxlan overlay network is identified by VNI. – Multicast Group Address is required to encapsulate BUM Traffic in IP Multicast. Group Address can be reused for other VNI. commit:expression: $VAR(./group/) != ""; "Must configure vxlan group for $VAR(@)" commit:expression: $VAR(./vni/) != ""; "Must configure vxlan vni for $VAR(@)“ 12
  • 13. node.def (cont’d) • create interface VXLAN_VNI="id $VAR(./vni/@)" VXLAN_GROUP="group $VAR(./group/@)" VXLAN_TTL="ttl 16" if [ ! $VAR(./link/) == "" ]; then VXLAN_DEV="dev $VAR(./link/@)" fi ip link add name $VAR(@) type vxlan $VXLAN_VNI $VXLAN_GROUP $VXLAN_TTL $VXLAN_DEV ip link set $VAR(@) up touch /tmp/vxlan-$VAR(@)-create skimped work... underlay device And, execute iproute2 13
  • 14. Change vni or group of existing vxlan interfaces • Sorry, it is not supported. • Changing group or vni requires delete and re-create the vxlan interface. 14
  • 15. VXLAN in Linux • ip link add type vxlan – Pseudo ethernet interface : vxlanX – Interfaces are connected to each vxlan overlay network corresponding to a VNI (vxlan_dev and FDB / VNI) – Namespace is supported struct net_device Linux Kernel netif_rx(skb) vxlan1 FDB vxlan0 FDB kernel udp socket udp_sk(sk)->encap_rcv = vxlan_udp_encap_recv iptunnel_xmit() 15
  • 16. How to specify attributes • ip link add type vxlan id 0 group X – Netlink API : An API to communicate to Kernel – NETLINK_ROUTE, NETLINK_NETFILTER and more Linux Kernel Userland Application Netlink Socket socket(AF_NETLINK, SOCK_RAW, netlink_family) Inter face routing table Netfilter struct nlmsghdr and rtattr etc 16
  • 17. How to specify attributes (cont’d) • ip link add type vxlan id 0 group X – RTNETLINK : routing socket • RTM_NEWLINK message is sent with attributes related to VXLAN (see man ip-link) int do_iplink(int argc, char **argv) { if (argc > 0) { if (iplink_have_newlink()) { if (matches(*argv, "add") == 0) return iplink_modify(RTM_NEWLINK, NLM_F_CREATE|NLM_F_EXCL, argc-1, argv+1); iproute2 package is a good text book of Netlink !! 17
  • 18. Attributes of vlxan interface • id : Virtual Network Identifier • dev : Uunderlay device (in VyOS, link) • group : Multicast group address • remote : An unicast IP address of VTEP for BUM traffic • local : Source IP address of encapsulated packet • ttl : TTL of encapsulated packet • port : Source port range of encapsulated packet But, these attributes can be only specified when a pseudo interface is created !! 18
  • 19. How to specify attributes (cont’d) • VXLAN driver kernel-source/drivers/net/vxlan.c – RTM messages are processed by rtnl_link_ops static struct rtnl_link_ops vxlan_link_ops __read_mostly = { .kind = "vxlan", .maxtype = IFLA_VXLAN_MAX, .policy = vxlan_policy, .priv_size = sizeof(struct vxlan_dev), .setup = vxlan_setup, .validate = vxlan_validate, .newlink = vxlan_newlink, .dellink = vxlan_dellink, .get_size = vxlan_get_size, .fill_info = vxlan_fill_info, }; vxlan_newlink () is called when RTM_NEWLINK is received 19
  • 20. vxlan_newlink () • Codes can not be pasted... too long... 1. Parse attributes 2. Set up parsed parameters to vxlan_dev 3. register_netdeivce 20
  • 21. And, you can see vxlan0 asano2:/home/upa % ifconfig vxlan0 vxlan0 Link encap:Ethernet HWaddr 02:0a:1e:ad:7f:31 inet6 addr: fe80::a:1eff:fead:7f31/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:690 (690.0 B) asano2:/home/upa % ip -d link show dev vxlan0 9: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default link/ether 02:0a:1e:ad:7f:31 brd ff:ff:ff:ff:ff:ff promiscuity 0 vxlan id 0 group 239.0.0.1 srcport 32768 61000 dstport 8472 ageing 300 asano2:/home/upa % bridge fdb show dev vxlan0 00:00:00:00:00:00 dst 239.0.0.1 self permanent 21
  • 22. As a result • vxlan parameters can not be changed after pseudo interface is created. • Do you have good ideas ? – I have just only one idea. • Use Generic Netlink like l2tp driver • Generic Netlink is a mechanism to add user defined netlink family dynamically. • It requires patches to vxlan driver and iproute2... 22
  • 23. Future work ? • Change destination port ? – Default is 8472 (OTV). 4789 is assigned for VXLAN by IANA – It can be changed through module_param. But it requires rmmod/insmod when port is changed. Of course, all pseudo interfaces are removed... • Support “remote” attribute – Easy. Is it needed for the community ? 23
  • 24. Overlay is the Only Way!! Thanks! [email protected] 24