xref: /freebsd/share/man/man4/carp.4 (revision 923544aa8d3517a20da9d99befa0a5e929790df2)
18e925890SGleb Smirnoff.\"	$OpenBSD: carp.4,v 1.16 2004/12/07 23:41:35 jmc Exp $
28e925890SGleb Smirnoff.\"
38e925890SGleb Smirnoff.\" Copyright (c) 2003, Ryan McBride.  All rights reserved.
408b68b0eSGleb Smirnoff.\" Copyright (c) 2011, Gleb Smirnoff <glebius@FreeBSD.org>
58e925890SGleb Smirnoff.\"
68e925890SGleb Smirnoff.\" Redistribution and use in source and binary forms, with or without
78e925890SGleb Smirnoff.\" modification, are permitted provided that the following conditions
88e925890SGleb Smirnoff.\" are met:
98e925890SGleb Smirnoff.\" 1. Redistributions of source code must retain the above copyright
108e925890SGleb Smirnoff.\"    notice, this list of conditions and the following disclaimer.
118e925890SGleb Smirnoff.\" 2. Redistributions in binary form must reproduce the above copyright
128e925890SGleb Smirnoff.\"    notice, this list of conditions and the following disclaimer in the
138e925890SGleb Smirnoff.\"    documentation and/or other materials provided with the distribution.
148e925890SGleb Smirnoff.\"
158e925890SGleb Smirnoff.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
168e925890SGleb Smirnoff.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
178e925890SGleb Smirnoff.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
188e925890SGleb Smirnoff.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
198e925890SGleb Smirnoff.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
208e925890SGleb Smirnoff.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
218e925890SGleb Smirnoff.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
228e925890SGleb Smirnoff.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
238e925890SGleb Smirnoff.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
248e925890SGleb Smirnoff.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
258e925890SGleb Smirnoff.\" SUCH DAMAGE.
268e925890SGleb Smirnoff.\"
278e925890SGleb Smirnoff.\" $FreeBSD$
288e925890SGleb Smirnoff.\"
2907b9a28aSSergey Kandaurov.Dd February 21, 2013
308e925890SGleb Smirnoff.Dt CARP 4
318e925890SGleb Smirnoff.Os
328e925890SGleb Smirnoff.Sh NAME
338e925890SGleb Smirnoff.Nm carp
348e925890SGleb Smirnoff.Nd Common Address Redundancy Protocol
358e925890SGleb Smirnoff.Sh SYNOPSIS
368e925890SGleb Smirnoff.Cd "device carp"
378e925890SGleb Smirnoff.Sh DESCRIPTION
3808b68b0eSGleb SmirnoffThe CARP allows multiple hosts on the same local network to share a set of
3908b68b0eSGleb SmirnoffIPv4 and/or IPv6 addresses.
408e925890SGleb SmirnoffIts primary purpose is to ensure that these
4108b68b0eSGleb Smirnoffaddresses are always available.
428e925890SGleb Smirnoff.Pp
438e925890SGleb SmirnoffTo use
448e925890SGleb Smirnoff.Nm ,
4584e3b10bSBenjamin Kadukthe administrator needs to configure at a minimum a common virtual host ID
4684e3b10bSBenjamin Kaduk(vhid), and attach at least one IP address to this vhid on each machine which
4708b68b0eSGleb Smirnoffis to take part in the virtual group.
4808b68b0eSGleb SmirnoffAdditional parameters can also be set on a per-vhid basis:
498e925890SGleb Smirnoff.Cm advbase
508e925890SGleb Smirnoffand
518e925890SGleb Smirnoff.Cm advskew ,
528e925890SGleb Smirnoffwhich are used to control how frequently the host sends advertisements when it
538e925890SGleb Smirnoffis the master for a virtual host, and
548e925890SGleb Smirnoff.Cm pass
553e630869SGleb Smirnoffwhich is used to authenticate
563e630869SGleb Smirnoff.Nm
573e630869SGleb Smirnoffadvertisements.
58762ce3e6SGleb SmirnoffThe
59762ce3e6SGleb Smirnoff.Cm advbase
60762ce3e6SGleb Smirnoffparameter stands for
61a4be0b3cSRuslan Ermilov.Dq "advertisement base" .
621a1fa3bdSGiorgos KeramidasIt is measured in seconds and specifies the base of the advertisement interval.
63762ce3e6SGleb SmirnoffThe
64762ce3e6SGleb Smirnoff.Cm advskew
65762ce3e6SGleb Smirnoffparameter stands for
66a4be0b3cSRuslan Ermilov.Dq "advertisement skew" .
67762ce3e6SGleb SmirnoffIt is measured in 1/256 of seconds.
68762ce3e6SGleb SmirnoffIt is added to the base advertisement interval to make one host advertise
69762ce3e6SGleb Smirnoffa bit slower that the other does.
70762ce3e6SGleb SmirnoffBoth
71762ce3e6SGleb Smirnoff.Cm advbase
72762ce3e6SGleb Smirnoffand
73762ce3e6SGleb Smirnoff.Cm advskew
74a4be0b3cSRuslan Ermilovare put inside CARP advertisements.
7584e3b10bSBenjamin KadukThese values can be configured using
768e925890SGleb Smirnoff.Xr ifconfig 8 ,
778e925890SGleb Smirnoffor through the
788e925890SGleb Smirnoff.Dv SIOCSVH
793e630869SGleb Smirnoff.Xr ioctl 2 .
808e925890SGleb Smirnoff.Pp
8184e3b10bSBenjamin KadukCARP virtual hosts can be configured on multicast-capable interfaces: Ethernet,
8208b68b0eSGleb Smirnofflayer 2 VLAN, FDDI and Token Ring.
8308b68b0eSGleb SmirnoffAn arbitrary number of virtual host IDs can be configured on an interface.
8408b68b0eSGleb SmirnoffAn arbitrary number of IPv4 or IPv6 addresses can be attached to a particular
8508b68b0eSGleb Smirnoffvhid.
8608b68b0eSGleb SmirnoffIt is important that all hosts participating in a vhid have the same list
8708b68b0eSGleb Smirnoffof prefixes configured on the vhid, since all prefixes are included in the
8808b68b0eSGleb Smirnoffcryptographic checksum supplied in each advertisement.
8908b68b0eSGleb SmirnoffMultiple vhids running on one interface participate in master/backup
9008b68b0eSGleb Smirnoffelections independently.
9108b68b0eSGleb Smirnoff.Pp
928e925890SGleb SmirnoffAdditionally, there are a number of global parameters which can be set using
938e925890SGleb Smirnoff.Xr sysctl 8 :
9484e3b10bSBenjamin Kaduk.Bl -tag -width ".Va net.inet.carp.ifdown_demotion_factor"
953e630869SGleb Smirnoff.It Va net.inet.carp.allow
968e925890SGleb SmirnoffAccept incoming
978e925890SGleb Smirnoff.Nm
988e925890SGleb Smirnoffpackets.
998e925890SGleb SmirnoffEnabled by default.
1003e630869SGleb Smirnoff.It Va net.inet.carp.preempt
1018e925890SGleb SmirnoffAllow virtual hosts to preempt each other.
102a1ae564eSGleb SmirnoffWhen enabled, a vhid in a backup state would preempt a master that
103a1ae564eSGleb Smirnoffis announcing itself with a lower advskew.
1048e925890SGleb SmirnoffDisabled by default.
1053e630869SGleb Smirnoff.It Va net.inet.carp.log
10684e3b10bSBenjamin KadukDetermines what events relating to
10784e3b10bSBenjamin Kaduk.Nm
108e98adf39SBenjamin Kadukvhids are logged.
10984e3b10bSBenjamin KadukA value of 0 disables any logging.
11084e3b10bSBenjamin KadukA value of 1 enables logging state changes of
111442af10aSGleb Smirnoff.Nm
112a1ae564eSGleb Smirnoffvhids.
113acc0fee0SRuslan ErmilovValues above 1 enable logging of bad
114acc0fee0SRuslan Ermilov.Nm
115acc0fee0SRuslan Ermilovpackets.
11684e3b10bSBenjamin KadukThe default value is 1.
117f08535f8SGleb Smirnoff.It Va net.inet.carp.demotion
118f08535f8SGleb SmirnoffThis value shows current level of CARP demotion.
119f08535f8SGleb SmirnoffThe value is added to the actual advskew sent in announcements for
120f08535f8SGleb Smirnoffall vhids.
121f08535f8SGleb SmirnoffAt normal system operation the demotion factor is zero.
122f08535f8SGleb SmirnoffHowever, problematic conditions raise its level: when
123f08535f8SGleb Smirnoff.Nm
124f08535f8SGleb Smirnoffexperiences problem with sending announcements, when an interface
125f08535f8SGleb Smirnoffrunning a vhid goes down, or while the
1261771f872SGleb Smirnoff.Xr pfsync 4
1271771f872SGleb Smirnoffinterface is not synchronized.
1287951008bSGleb SmirnoffThe demotion factor can be adjusted writing to the sysctl oid.
1297951008bSGleb SmirnoffThe signed value supplied to the
1307951008bSGleb Smirnoff.Xr sysctl 8
1317951008bSGleb Smirnoffcommand is added to current demotion factor.
1327951008bSGleb SmirnoffThis allows to control
133f08535f8SGleb Smirnoff.Nm
1347951008bSGleb Smirnoffbehaviour depending on some external conditions, for example on the status
1357951008bSGleb Smirnoffof some daemon utility.
136f08535f8SGleb Smirnoff.It Va net.inet.carp.ifdown_demotion_factor
13784e3b10bSBenjamin KadukThis value is added to
138f08535f8SGleb Smirnoff.Va net.inet.carp.demotion
13984e3b10bSBenjamin Kadukwhen an interface running a vhid goes down.
14084e3b10bSBenjamin KadukThe default value is 240 (the maximum advskew value).
141f08535f8SGleb Smirnoff.It Va net.inet.carp.senderr_demotion_factor
14284e3b10bSBenjamin KadukThis value is added to
143f08535f8SGleb Smirnoff.Va net.inet.carp.demotion
144f08535f8SGleb Smirnoffwhen
145f08535f8SGleb Smirnoff.Nm
146f08535f8SGleb Smirnoffexperiences errors sending its announcements.
14784e3b10bSBenjamin KadukThe default value is 240 (the maximum advskew value).
1488e925890SGleb Smirnoff.El
14908b68b0eSGleb Smirnoff.\".Sh ARP level load balancing
15084e3b10bSBenjamin Kaduk.\"A
15108b68b0eSGleb Smirnoff.\".Nm
15284e3b10bSBenjamin Kaduk.\"interface has limited abilities for load balancing incoming connections
15384e3b10bSBenjamin Kaduk.\"between hosts in an Ethernet network.
15484e3b10bSBenjamin Kaduk.\"For load-balancing operation, one needs several CARP interfaces that
15508b68b0eSGleb Smirnoff.\"are configured to the same IP address, but to a different vhids.
15608b68b0eSGleb Smirnoff.\"Once an ARP request is received, the CARP protocol will use a hashing
15708b68b0eSGleb Smirnoff.\"function against the source IP address in the ARP request to determine
15884e3b10bSBenjamin Kaduk.\"which vhid the request will be assigned to.
15984e3b10bSBenjamin Kaduk.\"If the corresponding CARP interface is the current
16084e3b10bSBenjamin Kaduk.\"master interface, a reply will
16184e3b10bSBenjamin Kaduk.\"be sent to the ARP request;
16284e3b10bSBenjamin Kaduk.\"otherwise it will be ignored.
16308b68b0eSGleb Smirnoff.\"See the
16408b68b0eSGleb Smirnoff.\".Sx EXAMPLES
16508b68b0eSGleb Smirnoff.\"section for a practical example of load balancing.
16608b68b0eSGleb Smirnoff.\".Pp
16784e3b10bSBenjamin Kaduk.\"The ARP load balancing implemented in
16884e3b10bSBenjamin Kaduk.\".Nm
16984e3b10bSBenjamin Kaduk.\"has some limitations.
17008b68b0eSGleb Smirnoff.\"First, ARP balancing only works on the local network segment.
17108b68b0eSGleb Smirnoff.\"It cannot balance traffic that crosses a router, because the
17208b68b0eSGleb Smirnoff.\"router itself will always be balanced to the same virtual host.
17308b68b0eSGleb Smirnoff.\"Second, ARP load balancing can lead to asymmetric routing
17408b68b0eSGleb Smirnoff.\"of incoming and outgoing traffic, and thus combining it with
17508b68b0eSGleb Smirnoff.\".Xr pfsync 4
17608b68b0eSGleb Smirnoff.\"is dangerous, because this creates a race condition between
17708b68b0eSGleb Smirnoff.\"balanced routers and a host they are serving.
17808b68b0eSGleb Smirnoff.\"Imagine an incoming packet creating state on the first router, being
17984e3b10bSBenjamin Kaduk.\"forwarded to its destination, and the destination replying faster
18008b68b0eSGleb Smirnoff.\"than the state information is packed and synced with the second router.
18108b68b0eSGleb Smirnoff.\"If the reply would be load balanced to second router, it will be
18284e3b10bSBenjamin Kaduk.\"dropped since the second router has not yet received information about
18384e3b10bSBenjamin Kaduk.\"the connection state.
184cc8b2291SGleb Smirnoff.Sh STATE CHANGE NOTIFICATIONS
185cc8b2291SGleb SmirnoffSometimes it is useful to get notified about
186cc8b2291SGleb Smirnoff.Nm
187cc8b2291SGleb Smirnoffstatus change events.
188cc8b2291SGleb SmirnoffThis can be accomplished by using
189cc8b2291SGleb Smirnoff.Xr devd 8
190cc8b2291SGleb Smirnoffhooks.
19108b68b0eSGleb SmirnoffMaster/slave events are signalled under system
19208b68b0eSGleb Smirnoff.Dv CARP .
19384e3b10bSBenjamin KadukThe subsystem specifies the vhid and name of the interface where
19484e3b10bSBenjamin Kadukthe master/slave event occurred.
19584e3b10bSBenjamin KadukThe type of the message displays the new state of the vhid.
196cc8b2291SGleb SmirnoffPlease see
197cc8b2291SGleb Smirnoff.Xr devd.conf 5
19884e3b10bSBenjamin Kadukand the
199cc8b2291SGleb Smirnoff.Sx EXAMPLES
200cc8b2291SGleb Smirnoffsection for more information.
2018e925890SGleb Smirnoff.Sh EXAMPLES
2028e925890SGleb SmirnoffFor firewalls and routers with multiple interfaces, it is desirable to
203a1ae564eSGleb Smirnofffailover all of the addresses running
2048e925890SGleb Smirnoff.Nm
205a1ae564eSGleb Smirnofftogether, when one of the physical interfaces goes down.
20684e3b10bSBenjamin KadukThis is achieved by the use of the preempt option.
20784e3b10bSBenjamin KadukEnable it on both hosts A and B:
2088e925890SGleb Smirnoff.Pp
2093e630869SGleb Smirnoff.Dl sysctl net.inet.carp.preempt=1
2108e925890SGleb Smirnoff.Pp
21108b68b0eSGleb SmirnoffAssume that host A is the preferred master and we are running the
21208b68b0eSGleb Smirnoff192.168.1.0/24 prefix on em0 and 192.168.2.0/24 on em1.
213da4d5bb7SDmitry MorozovskyThis is the setup for host A (advskew is above 0 so it could be overwritten
214da4d5bb7SDmitry Morozovskyin the emergency situation from the other host):
2158e925890SGleb Smirnoff.Bd -literal -offset indent
216da4d5bb7SDmitry Morozovskyifconfig em0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.1/24
217da4d5bb7SDmitry Morozovskyifconfig em1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.2.1/24
2188e925890SGleb Smirnoff.Ed
2198e925890SGleb Smirnoff.Pp
2203e630869SGleb SmirnoffThe setup for host B is identical, but it has a higher
2213e630869SGleb Smirnoff.Cm advskew :
2228e925890SGleb Smirnoff.Bd -literal -offset indent
223da4d5bb7SDmitry Morozovskyifconfig em0 vhid 1 advskew 200 pass mekmitasdigoat 192.168.1.1/24
224da4d5bb7SDmitry Morozovskyifconfig em1 vhid 2 advskew 200 pass mekmitasdigoat 192.168.2.1/24
2258e925890SGleb Smirnoff.Ed
2268e925890SGleb Smirnoff.Pp
227a1ae564eSGleb SmirnoffWhen one of the physical interfaces of host A fails,
2283e630869SGleb Smirnoff.Cm advskew
229a1ae564eSGleb Smirnoffis demoted to a configured value on all its
2308e925890SGleb Smirnoff.Nm
231a1ae564eSGleb Smirnoffvhids.
232a1ae564eSGleb SmirnoffDue to the preempt option, host B would start announcing itself, and thus
233a1ae564eSGleb Smirnoffpreempt host A on both interfaces instead of just the failed one.
23408b68b0eSGleb Smirnoff.\".Pp
23508b68b0eSGleb Smirnoff.\"In order to set up an ARP balanced virtual host, it is necessary to configure
23608b68b0eSGleb Smirnoff.\"one virtual host for each physical host which would respond to ARP requests
23708b68b0eSGleb Smirnoff.\"and thus handle the traffic.
23808b68b0eSGleb Smirnoff.\"In the following example, two virtual hosts are configured on two hosts to
23908b68b0eSGleb Smirnoff.\"provide balancing and failover for the IP address 192.168.1.10.
24008b68b0eSGleb Smirnoff.\".Pp
24108b68b0eSGleb Smirnoff.\"First the
24208b68b0eSGleb Smirnoff.\".Nm
24308b68b0eSGleb Smirnoff.\"interfaces on host A are configured.
24408b68b0eSGleb Smirnoff.\"The
24508b68b0eSGleb Smirnoff.\".Cm advskew
24608b68b0eSGleb Smirnoff.\"of 100 on the second virtual host means that its advertisements will be sent
24708b68b0eSGleb Smirnoff.\"out slightly less frequently.
24808b68b0eSGleb Smirnoff.\".Bd -literal -offset indent
24908b68b0eSGleb Smirnoff.\"ifconfig carp0 create
250da4d5bb7SDmitry Morozovsky.\"ifconfig carp0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.10/24
25108b68b0eSGleb Smirnoff.\"ifconfig carp1 create
252da4d5bb7SDmitry Morozovsky.\"ifconfig carp1 vhid 2 advskew 200 pass mekmitasdigoat 192.168.1.10/24
25308b68b0eSGleb Smirnoff.\".Ed
25408b68b0eSGleb Smirnoff.\".Pp
25508b68b0eSGleb Smirnoff.\"The configuration for host B is identical, except the
25608b68b0eSGleb Smirnoff.\".Cm advskew
25708b68b0eSGleb Smirnoff.\"is on virtual host 1 rather than virtual host 2.
25808b68b0eSGleb Smirnoff.\".Bd -literal -offset indent
25908b68b0eSGleb Smirnoff.\"ifconfig carp0 create
260da4d5bb7SDmitry Morozovsky.\"ifconfig carp0 vhid 1 advskew 200 pass mekmitasdigoat 192.168.1.10/24
26108b68b0eSGleb Smirnoff.\"ifconfig carp1 create
262da4d5bb7SDmitry Morozovsky.\"ifconfig carp1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.1.10/24
26308b68b0eSGleb Smirnoff.\".Ed
26408b68b0eSGleb Smirnoff.\".Pp
26508b68b0eSGleb Smirnoff.\"Finally, the ARP balancing feature must be enabled on both hosts:
26608b68b0eSGleb Smirnoff.\".Pp
26708b68b0eSGleb Smirnoff.\".Dl sysctl net.inet.carp.arpbalance=1
26808b68b0eSGleb Smirnoff.\".Pp
26908b68b0eSGleb Smirnoff.\"When the hosts receive an ARP request for 192.168.1.10, the source IP address
27008b68b0eSGleb Smirnoff.\"of the request is used to compute which virtual host should answer the request.
27108b68b0eSGleb Smirnoff.\"The host which is master of the selected virtual host will reply to the
27208b68b0eSGleb Smirnoff.\"request, the other(s) will ignore it.
27308b68b0eSGleb Smirnoff.\".Pp
27408b68b0eSGleb Smirnoff.\"This way, locally connected systems will receive different ARP replies and
27508b68b0eSGleb Smirnoff.\"subsequent IP traffic will be balanced among the hosts.
27608b68b0eSGleb Smirnoff.\"If one of the hosts fails, the other will take over the virtual MAC address,
27708b68b0eSGleb Smirnoff.\"and begin answering ARP requests on its behalf.
278cc8b2291SGleb Smirnoff.Pp
279cc8b2291SGleb SmirnoffProcessing of
280cc8b2291SGleb Smirnoff.Nm
28108b68b0eSGleb Smirnoffstatus change events can be set up by using the following devd.conf rule:
282cc8b2291SGleb Smirnoff.Bd -literal -offset indent
283cc8b2291SGleb Smirnoffnotify 0 {
28408b68b0eSGleb Smirnoff	match "system"          "CARP";
28507b9a28aSSergey Kandaurov	match "subsystem"       "[0-9]+@[0-9a-z]+";
28608b68b0eSGleb Smirnoff	match "type"            "(MASTER|BACKUP)";
28708b68b0eSGleb Smirnoff	action "/root/carpcontrol.sh $subsystem $type";
288cc8b2291SGleb Smirnoff};
289cc8b2291SGleb Smirnoff.Ed
2909c883c6cSGleb Smirnoff.Pp
2919c883c6cSGleb SmirnoffTo see
2929c883c6cSGleb Smirnoff.Nm
2939c883c6cSGleb Smirnoffpackets decoded in
2949c883c6cSGleb Smirnoff.Xr tcpdump 8
2959c883c6cSGleb Smirnoffoutput, one needs to specify
2969c883c6cSGleb Smirnoff.Fl T Ar carp
2979c883c6cSGleb Smirnoffoption, otherwise
2989c883c6cSGleb Smirnoff.Xr tcpdump 8
2999c883c6cSGleb Smirnofftries to interpret them as VRRP packets:
3009c883c6cSGleb Smirnoff.Bd -literal -offset indent
3019c883c6cSGleb Smirnofftcpdump -npi vlan0 -T carp
3029c883c6cSGleb Smirnoff.Ed
3038e925890SGleb Smirnoff.Sh SEE ALSO
3048e925890SGleb Smirnoff.Xr inet 4 ,
3051771f872SGleb Smirnoff.Xr pfsync 4 ,
3061eefdc3bSGleb Smirnoff.Xr devd.conf 5 ,
307*923544aaSBaptiste Daroussin.Xr rc.conf 5 ,
308a4be0b3cSRuslan Ermilov.Xr ifconfig 8 ,
3090b3504fdSChristian Brueffer.Xr sysctl 8 ,
3109c883c6cSGleb Smirnoff.Xr tcpdump 8
3118e925890SGleb Smirnoff.Sh HISTORY
3128e925890SGleb SmirnoffThe
3138e925890SGleb Smirnoff.Nm
3148e925890SGleb Smirnoffdevice first appeared in
3158e925890SGleb Smirnoff.Ox 3.5 .
3168e925890SGleb SmirnoffThe
3178e925890SGleb Smirnoff.Nm
3183e630869SGleb Smirnoffdevice was imported into
3198e925890SGleb Smirnoff.Fx 5.4 .
32008b68b0eSGleb SmirnoffIn
32184e3b10bSBenjamin Kaduk.Fx 10.0 ,
32208b68b0eSGleb Smirnoff.Nm
32308b68b0eSGleb Smirnoffwas significantly rewritten, and is no longer a pseudo-interface.
324