11dc2a785SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 21dc2a785SMauro Carvalho Chehab 31dc2a785SMauro Carvalho Chehab=================== 41dc2a785SMauro Carvalho ChehabIPVLAN Driver HOWTO 51dc2a785SMauro Carvalho Chehab=================== 61dc2a785SMauro Carvalho Chehab 71dc2a785SMauro Carvalho ChehabInitial Release: 81dc2a785SMauro Carvalho Chehab Mahesh Bandewar <maheshb AT google.com> 91dc2a785SMauro Carvalho Chehab 101dc2a785SMauro Carvalho Chehab1. Introduction: 111dc2a785SMauro Carvalho Chehab================ 121dc2a785SMauro Carvalho ChehabThis is conceptually very similar to the macvlan driver with one major 131dc2a785SMauro Carvalho Chehabexception of using L3 for mux-ing /demux-ing among slaves. This property makes 14404a5ad7SRandy Dunlapthe master device share the L2 with its slave devices. I have developed this 151dc2a785SMauro Carvalho Chehabdriver in conjunction with network namespaces and not sure if there is use case 161dc2a785SMauro Carvalho Chehaboutside of it. 171dc2a785SMauro Carvalho Chehab 181dc2a785SMauro Carvalho Chehab 191dc2a785SMauro Carvalho Chehab2. Building and Installation: 201dc2a785SMauro Carvalho Chehab============================= 211dc2a785SMauro Carvalho Chehab 221dc2a785SMauro Carvalho ChehabIn order to build the driver, please select the config item CONFIG_IPVLAN. 231dc2a785SMauro Carvalho ChehabThe driver can be built into the kernel (CONFIG_IPVLAN=y) or as a module 241dc2a785SMauro Carvalho Chehab(CONFIG_IPVLAN=m). 251dc2a785SMauro Carvalho Chehab 261dc2a785SMauro Carvalho Chehab 271dc2a785SMauro Carvalho Chehab3. Configuration: 281dc2a785SMauro Carvalho Chehab================= 291dc2a785SMauro Carvalho Chehab 301dc2a785SMauro Carvalho ChehabThere are no module parameters for this driver and it can be configured 311dc2a785SMauro Carvalho Chehabusing IProute2/ip utility. 321dc2a785SMauro Carvalho Chehab:: 331dc2a785SMauro Carvalho Chehab 341dc2a785SMauro Carvalho Chehab ip link add link <master> name <slave> type ipvlan [ mode MODE ] [ FLAGS ] 351dc2a785SMauro Carvalho Chehab where 361dc2a785SMauro Carvalho Chehab MODE: l3 (default) | l3s | l2 371dc2a785SMauro Carvalho Chehab FLAGS: bridge (default) | private | vepa 381dc2a785SMauro Carvalho Chehab 391dc2a785SMauro Carvalho Chehabe.g. 401dc2a785SMauro Carvalho Chehab 411dc2a785SMauro Carvalho Chehab (a) Following will create IPvlan link with eth0 as master in 421dc2a785SMauro Carvalho Chehab L3 bridge mode:: 431dc2a785SMauro Carvalho Chehab 441dc2a785SMauro Carvalho Chehab bash# ip link add link eth0 name ipvl0 type ipvlan 451dc2a785SMauro Carvalho Chehab (b) This command will create IPvlan link in L2 bridge mode:: 461dc2a785SMauro Carvalho Chehab 471dc2a785SMauro Carvalho Chehab bash# ip link add link eth0 name ipvl0 type ipvlan mode l2 bridge 481dc2a785SMauro Carvalho Chehab 491dc2a785SMauro Carvalho Chehab (c) This command will create an IPvlan device in L2 private mode:: 501dc2a785SMauro Carvalho Chehab 511dc2a785SMauro Carvalho Chehab bash# ip link add link eth0 name ipvlan type ipvlan mode l2 private 521dc2a785SMauro Carvalho Chehab 531dc2a785SMauro Carvalho Chehab (d) This command will create an IPvlan device in L2 vepa mode:: 541dc2a785SMauro Carvalho Chehab 551dc2a785SMauro Carvalho Chehab bash# ip link add link eth0 name ipvlan type ipvlan mode l2 vepa 561dc2a785SMauro Carvalho Chehab 571dc2a785SMauro Carvalho Chehab 581dc2a785SMauro Carvalho Chehab4. Operating modes: 591dc2a785SMauro Carvalho Chehab=================== 601dc2a785SMauro Carvalho Chehab 611dc2a785SMauro Carvalho ChehabIPvlan has two modes of operation - L2 and L3. For a given master device, 621dc2a785SMauro Carvalho Chehabyou can select one of these two modes and all slaves on that master will 631dc2a785SMauro Carvalho Chehaboperate in the same (selected) mode. The RX mode is almost identical except 64*a266ef69SRandy Dunlapthat in L3 mode the slaves won't receive any multicast / broadcast traffic. 651dc2a785SMauro Carvalho ChehabL3 mode is more restrictive since routing is controlled from the other (mostly) 661dc2a785SMauro Carvalho Chehabdefault namespace. 671dc2a785SMauro Carvalho Chehab 681dc2a785SMauro Carvalho Chehab4.1 L2 mode: 691dc2a785SMauro Carvalho Chehab------------ 701dc2a785SMauro Carvalho Chehab 711dc2a785SMauro Carvalho ChehabIn this mode TX processing happens on the stack instance attached to the 721dc2a785SMauro Carvalho Chehabslave device and packets are switched and queued to the master device to send 731dc2a785SMauro Carvalho Chehabout. In this mode the slaves will RX/TX multicast and broadcast (if applicable) 741dc2a785SMauro Carvalho Chehabas well. 751dc2a785SMauro Carvalho Chehab 761dc2a785SMauro Carvalho Chehab4.2 L3 mode: 771dc2a785SMauro Carvalho Chehab------------ 781dc2a785SMauro Carvalho Chehab 791dc2a785SMauro Carvalho ChehabIn this mode TX processing up to L3 happens on the stack instance attached 801dc2a785SMauro Carvalho Chehabto the slave device and packets are switched to the stack instance of the 811dc2a785SMauro Carvalho Chehabmaster device for the L2 processing and routing from that instance will be 821dc2a785SMauro Carvalho Chehabused before packets are queued on the outbound device. In this mode the slaves 831dc2a785SMauro Carvalho Chehabwill not receive nor can send multicast / broadcast traffic. 841dc2a785SMauro Carvalho Chehab 851dc2a785SMauro Carvalho Chehab4.3 L3S mode: 861dc2a785SMauro Carvalho Chehab------------- 871dc2a785SMauro Carvalho Chehab 881dc2a785SMauro Carvalho ChehabThis is very similar to the L3 mode except that iptables (conn-tracking) 891dc2a785SMauro Carvalho Chehabworks in this mode and hence it is L3-symmetric (L3s). This will have slightly less 901dc2a785SMauro Carvalho Chehabperformance but that shouldn't matter since you are choosing this mode over plain-L3 911dc2a785SMauro Carvalho Chehabmode to make conn-tracking work. 921dc2a785SMauro Carvalho Chehab 931dc2a785SMauro Carvalho Chehab5. Mode flags: 941dc2a785SMauro Carvalho Chehab============== 951dc2a785SMauro Carvalho Chehab 961dc2a785SMauro Carvalho ChehabAt this time following mode flags are available 971dc2a785SMauro Carvalho Chehab 981dc2a785SMauro Carvalho Chehab5.1 bridge: 991dc2a785SMauro Carvalho Chehab----------- 1001dc2a785SMauro Carvalho ChehabThis is the default option. To configure the IPvlan port in this mode, 1011dc2a785SMauro Carvalho Chehabuser can choose to either add this option on the command-line or don't specify 1021dc2a785SMauro Carvalho Chehabanything. This is the traditional mode where slaves can cross-talk among 1031dc2a785SMauro Carvalho Chehabthemselves apart from talking through the master device. 1041dc2a785SMauro Carvalho Chehab 1051dc2a785SMauro Carvalho Chehab5.2 private: 1061dc2a785SMauro Carvalho Chehab------------ 1071dc2a785SMauro Carvalho ChehabIf this option is added to the command-line, the port is set in private 1081dc2a785SMauro Carvalho Chehabmode. i.e. port won't allow cross communication between slaves. 1091dc2a785SMauro Carvalho Chehab 1101dc2a785SMauro Carvalho Chehab5.3 vepa: 1111dc2a785SMauro Carvalho Chehab--------- 1121dc2a785SMauro Carvalho ChehabIf this is added to the command-line, the port is set in VEPA mode. 1131dc2a785SMauro Carvalho Chehabi.e. port will offload switching functionality to the external entity as 1141dc2a785SMauro Carvalho Chehabdescribed in 802.1Qbg 1151dc2a785SMauro Carvalho ChehabNote: VEPA mode in IPvlan has limitations. IPvlan uses the mac-address of the 1161dc2a785SMauro Carvalho Chehabmaster-device, so the packets which are emitted in this mode for the adjacent 1171dc2a785SMauro Carvalho Chehabneighbor will have source and destination mac same. This will make the switch / 1181dc2a785SMauro Carvalho Chehabrouter send the redirect message. 1191dc2a785SMauro Carvalho Chehab 1201dc2a785SMauro Carvalho Chehab6. What to choose (macvlan vs. ipvlan)? 1211dc2a785SMauro Carvalho Chehab======================================= 1221dc2a785SMauro Carvalho Chehab 1231dc2a785SMauro Carvalho ChehabThese two devices are very similar in many regards and the specific use 1241dc2a785SMauro Carvalho Chehabcase could very well define which device to choose. if one of the following 1251dc2a785SMauro Carvalho Chehabsituations defines your use case then you can choose to use ipvlan: 1261dc2a785SMauro Carvalho Chehab 1271dc2a785SMauro Carvalho Chehab 1281dc2a785SMauro Carvalho Chehab(a) The Linux host that is connected to the external switch / router has 1291dc2a785SMauro Carvalho Chehab policy configured that allows only one mac per port. 1301dc2a785SMauro Carvalho Chehab(b) No of virtual devices created on a master exceed the mac capacity and 1311dc2a785SMauro Carvalho Chehab puts the NIC in promiscuous mode and degraded performance is a concern. 1321dc2a785SMauro Carvalho Chehab(c) If the slave device is to be put into the hostile / untrusted network 1331dc2a785SMauro Carvalho Chehab namespace where L2 on the slave could be changed / misused. 1341dc2a785SMauro Carvalho Chehab 1351dc2a785SMauro Carvalho Chehab 1361dc2a785SMauro Carvalho Chehab6. Example configuration: 1371dc2a785SMauro Carvalho Chehab========================= 1381dc2a785SMauro Carvalho Chehab 1391dc2a785SMauro Carvalho Chehab:: 1401dc2a785SMauro Carvalho Chehab 1411dc2a785SMauro Carvalho Chehab +=============================================================+ 1421dc2a785SMauro Carvalho Chehab | Host: host1 | 1431dc2a785SMauro Carvalho Chehab | | 1441dc2a785SMauro Carvalho Chehab | +----------------------+ +----------------------+ | 1451dc2a785SMauro Carvalho Chehab | | NS:ns0 | | NS:ns1 | | 1461dc2a785SMauro Carvalho Chehab | | | | | | 1471dc2a785SMauro Carvalho Chehab | | | | | | 1481dc2a785SMauro Carvalho Chehab | | ipvl0 | | ipvl1 | | 1491dc2a785SMauro Carvalho Chehab | +----------#-----------+ +-----------#----------+ | 1501dc2a785SMauro Carvalho Chehab | # # | 1511dc2a785SMauro Carvalho Chehab | ################################ | 1521dc2a785SMauro Carvalho Chehab | # eth0 | 1531dc2a785SMauro Carvalho Chehab +==============================#==============================+ 1541dc2a785SMauro Carvalho Chehab 1551dc2a785SMauro Carvalho Chehab 1561dc2a785SMauro Carvalho Chehab(a) Create two network namespaces - ns0, ns1:: 1571dc2a785SMauro Carvalho Chehab 1581dc2a785SMauro Carvalho Chehab ip netns add ns0 1591dc2a785SMauro Carvalho Chehab ip netns add ns1 1601dc2a785SMauro Carvalho Chehab 1611dc2a785SMauro Carvalho Chehab(b) Create two ipvlan slaves on eth0 (master device):: 1621dc2a785SMauro Carvalho Chehab 1631dc2a785SMauro Carvalho Chehab ip link add link eth0 ipvl0 type ipvlan mode l2 1641dc2a785SMauro Carvalho Chehab ip link add link eth0 ipvl1 type ipvlan mode l2 1651dc2a785SMauro Carvalho Chehab 1661dc2a785SMauro Carvalho Chehab(c) Assign slaves to the respective network namespaces:: 1671dc2a785SMauro Carvalho Chehab 1681dc2a785SMauro Carvalho Chehab ip link set dev ipvl0 netns ns0 1691dc2a785SMauro Carvalho Chehab ip link set dev ipvl1 netns ns1 1701dc2a785SMauro Carvalho Chehab 1711dc2a785SMauro Carvalho Chehab(d) Now switch to the namespace (ns0 or ns1) to configure the slave devices 1721dc2a785SMauro Carvalho Chehab 1731dc2a785SMauro Carvalho Chehab - For ns0:: 1741dc2a785SMauro Carvalho Chehab 1751dc2a785SMauro Carvalho Chehab (1) ip netns exec ns0 bash 1761dc2a785SMauro Carvalho Chehab (2) ip link set dev ipvl0 up 1771dc2a785SMauro Carvalho Chehab (3) ip link set dev lo up 1781dc2a785SMauro Carvalho Chehab (4) ip -4 addr add 127.0.0.1 dev lo 1791dc2a785SMauro Carvalho Chehab (5) ip -4 addr add $IPADDR dev ipvl0 1801dc2a785SMauro Carvalho Chehab (6) ip -4 route add default via $ROUTER dev ipvl0 1811dc2a785SMauro Carvalho Chehab 1821dc2a785SMauro Carvalho Chehab - For ns1:: 1831dc2a785SMauro Carvalho Chehab 1841dc2a785SMauro Carvalho Chehab (1) ip netns exec ns1 bash 1851dc2a785SMauro Carvalho Chehab (2) ip link set dev ipvl1 up 1861dc2a785SMauro Carvalho Chehab (3) ip link set dev lo up 1871dc2a785SMauro Carvalho Chehab (4) ip -4 addr add 127.0.0.1 dev lo 1881dc2a785SMauro Carvalho Chehab (5) ip -4 addr add $IPADDR dev ipvl1 1891dc2a785SMauro Carvalho Chehab (6) ip -4 route add default via $ROUTER dev ipvl1 190