xref: /openbmc/linux/Documentation/networking/ipvlan.rst (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
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