13 Jun, 2014

1 commit

  • When running RHEL6 userspace on a current upstream kernel, "ip link"
    fails to show VF information.

    The reason is a kerneluserspace API change introduced by commit
    88c5b5ce5cb57 ("rtnetlink: Call nlmsg_parse() with correct header length"),
    after which the kernel does not see iproute2's IFLA_EXT_MASK attribute
    in the netlink request.

    iproute2 adjusted for the API change in its commit 63338dca4513
    ("libnetlink: Use ifinfomsg instead of rtgenmsg in rtnl_wilddump_req_filter").

    The problem has been noticed before:
    http://marc.info/?l=linux-netdev&m=136692296022182&w=2
    (Subject: Re: getting VF link info seems to be broken in 3.9-rc8)

    We can do better than tell those with old userspace to upgrade. We can
    recognize the old iproute2 in the kernel by checking the netlink message
    length. Even when including the IFLA_EXT_MASK attribute, its netlink
    message is shorter than struct ifinfomsg.

    With this patch "ip link" shows VF information in both old and new
    iproute2 versions.

    Signed-off-by: Michal Schmidt
    Signed-off-by: David S. Miller

    Michal Schmidt
     

12 Jun, 2014

2 commits


09 Jun, 2014

1 commit

  • unregister_netdevice_many() API is error prone and we had too
    many bugs because of dangling LIST_HEAD on stacks.

    See commit f87e6f47933e3e ("net: dont leave active on stack LIST_HEAD")

    In fact, instead of making sure no caller leaves an active list_head,
    just force a list_del() in the callee. No one seems to need to access
    the list after unregister_netdevice_many()

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

04 Jun, 2014

2 commits


24 May, 2014

2 commits

  • Conflicts:
    drivers/net/bonding/bond_alb.c
    drivers/net/ethernet/altera/altera_msgdma.c
    drivers/net/ethernet/altera/altera_sgdma.c
    net/ipv6/xfrm6_output.c

    Several cases of overlapping changes.

    The xfrm6_output.c has a bug fix which overlaps the renaming
    of skb->local_df to skb->ignore_df.

    In the Altera TSE driver cases, the register access cleanups
    in net-next overlapped with bug fixes done in net.

    Similarly a bug fix to send ALB packets in the bonding driver using
    the right source address overlaps with cleanups in net-next.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • o min_tx_rate puts lower limit on the VF bandwidth. VF is guaranteed
    to have a bandwidth of at least this value.
    max_tx_rate puts cap on the VF bandwidth. VF can have a bandwidth
    of up to this value.

    o A new handler set_vf_rate for attr IFLA_VF_RATE has been introduced
    which takes 4 arguments:
    netdev, VF number, min_tx_rate, max_tx_rate

    o ndo_set_vf_rate replaces ndo_set_vf_tx_rate handler.

    o Drivers that currently implement ndo_set_vf_tx_rate should now call
    ndo_set_vf_rate instead and reject attempt to set a minimum bandwidth
    greater than 0 for IFLA_VF_TX_RATE when IFLA_VF_RATE is not yet
    implemented by driver.

    o If user enters only one of either min_tx_rate or max_tx_rate, then,
    userland should read back the other value from driver and set both
    for IFLA_VF_RATE.
    Drivers that have not yet implemented IFLA_VF_RATE should always
    return min_tx_rate as 0 when read from ip tool.

    o If both IFLA_VF_TX_RATE and IFLA_VF_RATE options are specified, then
    IFLA_VF_RATE should override.

    o Idea is to have consistent display of rate values to user.

    o Usage example: -

    ./ip link set p4p1 vf 0 rate 900

    ./ip link show p4p1
    32: p4p1: mtu 1500 qdisc noop state DOWN mode
    DEFAULT qlen 1000
    link/ether 00:0e:1e:08:b0:f0 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 3e:a0:ca:bd:ae:5a, tx rate 900 (Mbps), max_tx_rate 900Mbps
    vf 1 MAC f6:c6:7c:3f:3d:6c
    vf 2 MAC 56:32:43:98:d7:71
    vf 3 MAC d6:be:c3:b5:85:ff
    vf 4 MAC ee:a9:9a:1e:19:14
    vf 5 MAC 4a:d0:4c:07:52:18
    vf 6 MAC 3a:76:44:93:62:f9
    vf 7 MAC 82:e9:e7:e3:15:1a

    ./ip link set p4p1 vf 0 max_tx_rate 300 min_tx_rate 200

    ./ip link show p4p1
    32: p4p1: mtu 1500 qdisc noop state DOWN mode
    DEFAULT qlen 1000
    link/ether 00:0e:1e:08:b0:f0 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 3e:a0:ca:bd:ae:5a, tx rate 300 (Mbps), max_tx_rate 300Mbps,
    min_tx_rate 200Mbps
    vf 1 MAC f6:c6:7c:3f:3d:6c
    vf 2 MAC 56:32:43:98:d7:71
    vf 3 MAC d6:be:c3:b5:85:ff
    vf 4 MAC ee:a9:9a:1e:19:14
    vf 5 MAC 4a:d0:4c:07:52:18
    vf 6 MAC 3a:76:44:93:62:f9
    vf 7 MAC 82:e9:e7:e3:15:1a

    ./ip link set p4p1 vf 0 max_tx_rate 600 rate 300

    ./ip link show p4p1
    32: p4p1: mtu 1500 qdisc noop state DOWN mode
    DEFAULT qlen 1000
    link/ether 00:0e:1e:08:b0:f brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 3e:a0:ca:bd:ae:5, tx rate 600 (Mbps), max_tx_rate 600Mbps,
    min_tx_rate 200Mbps
    vf 1 MAC f6:c6:7c:3f:3d:6c
    vf 2 MAC 56:32:43:98:d7:71
    vf 3 MAC d6:be:c3:b5:85:ff
    vf 4 MAC ee:a9:9a:1e:19:14
    vf 5 MAC 4a:d0:4c:07:52:18
    vf 6 MAC 3a:76:44:93:62:f9
    vf 7 MAC 82:e9:e7:e3:15:1a

    Signed-off-by: Sucheta Chakraborty
    Signed-off-by: David S. Miller

    Sucheta Chakraborty
     

16 May, 2014

1 commit

  • From: Cong Wang

    commit 50624c934db18ab90 (net: Delay default_device_exit_batch until no
    devices are unregistering) introduced rtnl_lock_unregistering() for
    default_device_exit_batch(). Same race could happen we when rmmod a driver
    which calls rtnl_link_unregister() as we call dev->destructor without rtnl
    lock.

    For long term, I think we should clean up the mess of netdev_run_todo()
    and net namespce exit code.

    Cc: Eric W. Biederman
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     

25 Apr, 2014

3 commits

  • Since 115c9b81928360d769a76c632bae62d15206a94a (rtnetlink: Fix problem with
    buffer allocation), RTM_NEWLINK messages only contain the IFLA_VFINFO_LIST
    attribute if they were solicited by a GETLINK message containing an
    IFLA_EXT_MASK attribute with the RTEXT_FILTER_VF flag.

    That was done because some user programs broke when they received more data
    than expected - because IFLA_VFINFO_LIST contains information for each VF
    it can become large if there are many VFs.

    However, the IFLA_VF_PORTS attribute, supplied for devices which implement
    ndo_get_vf_port (currently the 'enic' driver only), has the same problem.
    It supplies per-VF information and can therefore become large, but it is
    not currently conditional on the IFLA_EXT_MASK value.

    Worse, it interacts badly with the existing EXT_MASK handling. When
    IFLA_EXT_MASK is not supplied, the buffer for netlink replies is fixed at
    NLMSG_GOODSIZE. If the information for IFLA_VF_PORTS exceeds this, then
    rtnl_fill_ifinfo() returns -EMSGSIZE on the first message in a packet.
    netlink_dump() will misinterpret this as having finished the listing and
    omit data for this interface and all subsequent ones. That can cause
    getifaddrs(3) to enter an infinite loop.

    This patch addresses the problem by only supplying IFLA_VF_PORTS when
    IFLA_EXT_MASK is supplied with the RTEXT_FILTER_VF flag set.

    Signed-off-by: David Gibson
    Reviewed-by: Jiri Pirko
    Signed-off-by: David S. Miller

    David Gibson
     
  • Without IFLA_EXT_MASK specified, the information reported for a single
    interface in response to RTM_GETLINK is expected to fit within a netlink
    packet of NLMSG_GOODSIZE.

    If it doesn't, however, things will go badly wrong, When listing all
    interfaces, netlink_dump() will incorrectly treat -EMSGSIZE on the first
    message in a packet as the end of the listing and omit information for
    that interface and all subsequent ones. This can cause getifaddrs(3) to
    enter an infinite loop.

    This patch won't fix the problem, but it will WARN_ON() making it easier to
    track down what's going wrong.

    Signed-off-by: David Gibson
    Reviewed-by: Jiri Pirko
    Signed-off-by: David S. Miller

    David Gibson
     
  • It is possible by passing a netlink socket to a more privileged
    executable and then to fool that executable into writing to the socket
    data that happens to be valid netlink message to do something that
    privileged executable did not intend to do.

    To keep this from happening replace bare capable and ns_capable calls
    with netlink_capable, netlink_net_calls and netlink_ns_capable calls.
    Which act the same as the previous calls except they verify that the
    opener of the socket had the desired permissions as well.

    Reported-by: Andy Lutomirski
    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     

01 Apr, 2014

1 commit

  • This allows to monitor carrier on/off transitions and detect link
    flapping issues:
    - new /sys/class/net/X/carrier_changes
    - new rtnetlink IFLA_CARRIER_CHANGES (getlink)

    Tested:
    - grep . /sys/class/net/*/carrier_changes
    + ip link set dev X down/up
    + plug/unplug cable
    - updated iproute2: prints IFLA_CARRIER_CHANGES
    - iproute2 20121211-2 (debian): unchanged behavior

    Signed-off-by: David Decotigny
    Signed-off-by: David S. Miller

    david decotigny
     

26 Mar, 2014

1 commit


21 Mar, 2014

1 commit

  • Commit 3ff661c38c84 ("net: rtnetlink notify events for FDB NTF_SELF adds and
    deletes") reuses the function nlmsg_populate_fdb_fill() to notify fdb events.
    But this function was used only for dump and thus was always setting the
    flag NLM_F_MULTI, which is wrong in case of a single notification.

    Libraries like libnl will wait forever for NLMSG_DONE.

    CC: Thomas Graf
    Signed-off-by: Nicolas Dichtel
    Acked-by: Thomas Graf
    Signed-off-by: David S. Miller

    Nicolas Dichtel
     

19 Feb, 2014

2 commits


14 Feb, 2014

1 commit

  • I saw the following BUG when ->newlink() fails in rtnl_newlink():

    [ 40.240058] kernel BUG at net/core/dev.c:6438!

    this is due to free_netdev() is not supposed to be called before
    netdev is completely unregistered, therefore it is not correct
    to call free_netdev() here, at least for ops->newlink!=NULL case,
    many drivers call it in ->destructor so that rtnl_unlock() will
    take care of it, we probably don't need to do anything here.

    Cc: David S. Miller
    Cc: Eric Dumazet
    Signed-off-by: Cong Wang
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     

05 Feb, 2014

1 commit

  • We should check whether rtnetlink link operations
    are defined before calling get_slave_size().

    Without this, the following oops can occur when
    adding a tap device to OVS.

    [ 87.839553] BUG: unable to handle kernel NULL pointer dereference at 00000000000000a8
    [ 87.839595] IP: [] if_nlmsg_size+0xf0/0x220
    [...]
    [ 87.840651] Call Trace:
    [ 87.840664] [] ? rtmsg_ifinfo+0x2b/0x100
    [ 87.840688] [] ? __netdev_adjacent_dev_insert+0x150/0x1a0
    [ 87.840718] [] ? rtnetlink_event+0x30/0x40
    [ 87.840742] [] ? notifier_call_chain+0x44/0x70
    [ 87.840768] [] ? __netdev_upper_dev_link+0x3c6/0x3f0
    [ 87.840798] [] ? netdev_create+0xcc/0x160 [openvswitch]
    [ 87.840828] [] ? ovs_vport_add+0x4a/0xd0 [openvswitch]
    [ 87.840857] [] ? new_vport+0x9/0x50 [openvswitch]
    [ 87.840884] [] ? ovs_vport_cmd_new+0x11e/0x210 [openvswitch]
    [ 87.840915] [] ? genl_family_rcv_msg+0x19a/0x360
    [ 87.840941] [] ? genl_family_rcv_msg+0x360/0x360
    [ 87.840967] [] ? genl_rcv_msg+0x79/0xc0
    [ 87.840991] [] ? __kmalloc_reserve.isra.25+0x29/0x80
    [ 87.841018] [] ? netlink_rcv_skb+0xa9/0xc0
    [ 87.841042] [] ? genl_rcv+0x1f/0x30
    [ 87.841064] [] ? netlink_unicast+0xe8/0x1e0
    [ 87.841088] [] ? netlink_sendmsg+0x31a/0x750
    [ 87.841113] [] ? sock_sendmsg+0x86/0xc0
    [ 87.841136] [] ? __netdev_update_features+0x4d/0x200
    [ 87.841163] [] ? ethtool_get_value+0x2e/0x50
    [ 87.841188] [] ? ___sys_sendmsg+0x359/0x370
    [ 87.841212] [] ? dev_ioctl+0x1a6/0x5c0
    [ 87.841236] [] ? autoremove_wake_function+0x30/0x30
    [ 87.841264] [] ? sock_do_ioctl+0x3d/0x50
    [ 87.841288] [] ? sock_ioctl+0x1e8/0x2c0
    [ 87.841312] [] ? do_vfs_ioctl+0x2cf/0x4b0
    [ 87.841335] [] ? __sys_sendmsg+0x39/0x70
    [ 87.841362] [] ? system_call_fastpath+0x16/0x1b
    [ 87.841386] Code: c0 74 10 48 89 ef ff d0 83 c0 07 83 e0 fc 48 98 49 01 c7 48 89 ef e8 d0 d6 fe ff 48 85 c0 0f 84 df 00 00 00 48 8b 90 08 07 00 00 8b 8a a8 00 00 00 31 d2 48 85 c9 74 0c 48 89 ee 48 89 c7 ff
    [ 87.841529] RIP [] if_nlmsg_size+0xf0/0x220
    [ 87.841555] RSP
    [ 87.841569] CR2: 00000000000000a8
    [ 87.851442] ---[ end trace e42ab217691b4fc2 ]---

    Signed-off-by: Fernando Luis Vazquez Cao
    Acked-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Fernando Luis Vazquez Cao
     

24 Jan, 2014

1 commit


23 Jan, 2014

3 commits


18 Jan, 2014

1 commit

  • If link is IFF_SLAVE, extend link dev netlink attributes to include
    slave attributes with new IFLA_SLAVE nest. Add netlink notification
    (RTM_NEWLINK) when slave status changes from backup to active, or
    visa-versa.

    Adds new ndo_get_slave op to net_device_ops to fill skb with IFLA_SLAVE
    attributes. Currently only used by bonding driver, but could be
    used by other aggregating devices with slaves.

    Signed-off-by: Scott Feldman
    Signed-off-by: David S. Miller

    sfeldma@cumulusnetworks.com
     

02 Jan, 2014

1 commit


26 Oct, 2013

1 commit

  • commit 991fb3f74c "dev: always advertise rx_flags changes via netlink"
    introduced rtnl notification from __dev_set_promiscuity(),
    which can be called in atomic context.

    Steps to reproduce:
    ip tuntap add dev tap1 mode tap
    ifconfig tap1 up
    tcpdump -nei tap1 &
    ip tuntap del dev tap1 mode tap

    [ 271.627994] device tap1 left promiscuous mode
    [ 271.639897] BUG: sleeping function called from invalid context at mm/slub.c:940
    [ 271.664491] in_atomic(): 1, irqs_disabled(): 0, pid: 3394, name: ip
    [ 271.677525] INFO: lockdep is turned off.
    [ 271.690503] CPU: 0 PID: 3394 Comm: ip Tainted: G W 3.12.0-rc3+ #73
    [ 271.703996] Hardware name: System manufacturer System Product Name/P8Z77 WS, BIOS 3007 07/26/2012
    [ 271.731254] ffffffff81a58506 ffff8807f0d57a58 ffffffff817544e5 ffff88082fa0f428
    [ 271.760261] ffff8808071f5f40 ffff8807f0d57a88 ffffffff8108bad1 ffffffff81110ff8
    [ 271.790683] 0000000000000010 00000000000000d0 00000000000000d0 ffff8807f0d57af8
    [ 271.822332] Call Trace:
    [ 271.838234] [] dump_stack+0x55/0x76
    [ 271.854446] [] __might_sleep+0x181/0x240
    [ 271.870836] [] ? rcu_irq_exit+0x68/0xb0
    [ 271.887076] [] kmem_cache_alloc_node+0x4e/0x2a0
    [ 271.903368] [] ? vprintk_emit+0x1dc/0x5a0
    [ 271.919716] [] ? __alloc_skb+0x57/0x2a0
    [ 271.936088] [] ? vprintk_emit+0x1e0/0x5a0
    [ 271.952504] [] __alloc_skb+0x57/0x2a0
    [ 271.968902] [] rtmsg_ifinfo+0x52/0x100
    [ 271.985302] [] __dev_notify_flags+0xad/0xc0
    [ 272.001642] [] __dev_set_promiscuity+0x8c/0x1c0
    [ 272.017917] [] ? packet_notifier+0x5/0x380
    [ 272.033961] [] dev_set_promiscuity+0x29/0x50
    [ 272.049855] [] packet_dev_mc+0x87/0xc0
    [ 272.065494] [] packet_notifier+0x1b2/0x380
    [ 272.080915] [] ? packet_notifier+0x5/0x380
    [ 272.096009] [] notifier_call_chain+0x66/0x150
    [ 272.110803] [] __raw_notifier_call_chain+0xe/0x10
    [ 272.125468] [] raw_notifier_call_chain+0x16/0x20
    [ 272.139984] [] call_netdevice_notifiers_info+0x40/0x70
    [ 272.154523] [] call_netdevice_notifiers+0x16/0x20
    [ 272.168552] [] rollback_registered_many+0x145/0x240
    [ 272.182263] [] rollback_registered+0x31/0x40
    [ 272.195369] [] unregister_netdevice_queue+0x58/0x90
    [ 272.208230] [] __tun_detach+0x140/0x340
    [ 272.220686] [] tun_chr_close+0x36/0x60

    Signed-off-by: Alexei Starovoitov
    Acked-by: Nicolas Dichtel
    Signed-off-by: David S. Miller

    Alexei Starovoitov
     

01 Oct, 2013

1 commit


17 Aug, 2013

1 commit


15 Aug, 2013

1 commit


14 Aug, 2013

1 commit

  • Fix the iproute2 command `bridge vlan show`, after switching from
    rtgenmsg to ifinfomsg.

    Let's start with a little history:

    Feb 20: Vlad Yasevich got his VLAN-aware bridge patchset included in
    the 3.9 merge window.
    In the kernel commit 6cbdceeb, he added attribute support to
    bridge GETLINK requests sent with rtgenmsg.

    Mar 6th: Vlad got this iproute2 reference implementation of the bridge
    vlan netlink interface accepted (iproute2 9eff0e5c)

    Apr 25th: iproute2 switched from using rtgenmsg to ifinfomsg (63338dca)
    http://patchwork.ozlabs.org/patch/239602/
    http://marc.info/?t=136680900700007

    Apr 28th: Linus released 3.9

    Apr 30th: Stephen released iproute2 3.9.0

    The `bridge vlan show` command haven't been working since the switch to
    ifinfomsg, or in a released version of iproute2. Since the kernel side
    only supports rtgenmsg, which iproute2 switched away from just prior to
    the iproute2 3.9.0 release.

    I haven't been able to find any documentation, about neither rtgenmsg
    nor ifinfomsg, and in which situation to use which, but kernel commit
    88c5b5ce seams to suggest that ifinfomsg should be used.

    Fixing this in kernel will break compatibility, but I doubt that anybody
    have been using it due to this bug in the user space reference
    implementation, at least not without noticing this bug. That said the
    functionality is still fully functional in 3.9, when reversing iproute2
    commit 63338dca.

    This could also be fixed in iproute2, but thats an ugly patch that would
    reintroduce rtgenmsg in iproute2, and from searching in netdev it seams
    like rtgenmsg usage is discouraged. I'm assuming that the only reason
    that Vlad implemented the kernel side to use rtgenmsg, was because
    iproute2 was using it at the time.

    Signed-off-by: Asbjoern Sloth Toennesen
    Reviewed-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Asbjoern Sloth Toennesen
     

10 Aug, 2013

1 commit


31 Jul, 2013

1 commit


26 Jun, 2013

1 commit


14 Jun, 2013

1 commit

  • Add netlink directives and ndo entry to allow for controling
    VF link, which can be in one of three states:

    Auto - VF link state reflects the PF link state (default)

    Up - VF link state is up, traffic from VF to VF works even if
    the actual PF link is down

    Down - VF link state is down, no traffic from/to this VF, can be of
    use while configuring the VF

    Signed-off-by: Rony Efraim
    Signed-off-by: Or Gerlitz
    Signed-off-by: David S. Miller

    Rony Efraim
     

29 May, 2013

1 commit

  • So far, only net_device * could be passed along with netdevice notifier
    event. This patch provides a possibility to pass custom structure
    able to provide info that event listener needs to know.

    Signed-off-by: Jiri Pirko

    v2->v3: fix typo on simeth
    shortened dev_getter
    shortened notifier_info struct name
    v1->v2: fix notifier_call parameter in call_netdevice_notifier()
    Signed-off-by: David S. Miller

    Jiri Pirko
     

25 Apr, 2013

1 commit

  • Commit 6681712d67eef14c4ce793561c3231659153a320
    vxlan: generalize forwarding tables

    relaxed the address checks in rtnl_fdb_del() to use is_zero_ether_addr().
    This allows users to add multicast addresses using the fdb API. However,
    the check in rtnl_fdb_del() still uses a more strict
    is_valid_ether_addr() which rejects multicast addresses. Thus it
    is possible to add an fdb that can not be later removed.
    Relax the check in rtnl_fdb_del() as well.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     

23 Apr, 2013

1 commit

  • Conflicts:
    drivers/net/ethernet/emulex/benet/be_main.c
    drivers/net/ethernet/intel/igb/igb_main.c
    drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
    include/net/scm.h
    net/batman-adv/routing.c
    net/ipv4/tcp_input.c

    The e{uid,gid} --> {uid,gid} credentials fix conflicted with the
    cleanup in net-next to now pass cred structs around.

    The be2net driver had a bug fix in 'net' that overlapped with the VLAN
    interface changes by Patrick McHardy in net-next.

    An IGB conflict existed because in 'net' the build_skb() support was
    reverted, and in 'net-next' there was a comment style fix within that
    code.

    Several batman-adv conflicts were resolved by making sure that all
    calls to batadv_is_my_mac() are changed to have a new bat_priv first
    argument.

    Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO
    rewrite in 'net-next', mostly overlapping changes.

    Thanks to Stephen Rothwell and Antonio Quartulli for help with several
    of these merge resolutions.

    Signed-off-by: David S. Miller

    David S. Miller
     

09 Apr, 2013

1 commit


02 Apr, 2013

1 commit


30 Mar, 2013

1 commit

  • In rtnl_fdb_dump() when the fdb_dump ndo op is not populated
    we never set the idx value so that cb->arg[0] is always 0.
    Resulting in a endless loop of messages.

    Introduced with this commit,

    commit 090096bf3db1c281ddd034573260045888a68fea
    Author: Vlad Yasevich
    Date: Wed Mar 6 15:39:42 2013 +0000

    net: generic fdb support for drivers without ndo_fdb_

    CC: Vlad Yasevich
    Signed-off-by: John Fastabend
    Signed-off-by: David S. Miller

    John Fastabend