1. 02 Mar, 2016 11 commits
  2. 01 Mar, 2016 29 commits
    • David S. Miller's avatar
      Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge · 7da5ee09
      David S. Miller authored
      Antonio Quartulli says:
      
      ====================
      batman-adv 20160229
      
      this is our (hopefully) latest batch of patches intended for net-next.
      
      With this patchset we finally introduce B.A.T.M.A.N. V: the latest
      version of our routing protocol.
      Technical documentation describing the protocol in more detail can
      be found in our wiki[1][2][3][4].
      
      For what concerns this pull request, you can find the high level
      description right below.
      
      [1] https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V
      [2] https://www.open-mesh.org/projects/batman-adv/wiki/OGMv2
      [3] https://www.open-mesh.org/projects/batman-adv/wiki/ELP
      [4] https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V_Tests
      
       ...
      
      With this patchset we finally introduce our new routing protocol:
      B.A.T.M.A.N. V. Its implementation started quite some years ago,
      but due to the big changes being introduced it took a while to be
      discussed, designed, worked, re-worked, tested and debugged (well,
      we're never done with the latest). The entire operation has
      basically been a team work involving all the core contributors
      together with other people interested in the project.
      
      The new protocol is divided into two main subcomponents, called
      respectively ELP and OGMv2. The former is in charge of
      dealing with the neighbour discovery and link quality estimation,
      while the latter implements the algorithm that spreads the
      metrics around the network and computes optimal paths.
      
      The biggest change introduced with B.A.T.M.A.N. V is the new
      metric: the protocol won't rely on packet loss anymore, but it
      will use the estimated throughput extracted directly from the
      wifi driver (when available) by querying cfg80211.
      Batman-adv will also send some unicast probing packets when
      an interface is not used for payload traffic to make sure that
      such values are current.
      
      The new protocol can be compiled-in or not like other
      features we have and when selected will pull in CFG80211 as
      dependency for the reason described above.
      
      Thanks to the big work brought up in the past by Marek Lindner,
      batman-adv can easily deal several protocol implementations,
      therefore compiling in this new version does not exclude the
      older.
      This means that the user is offered the option to choose
      the protocol when creating the mesh interface (default is the
      old one to keep backward compatibility).
      
      Along with the protocol there are some sysfs knobs that are
      introduced to fine tune some of its behaviours, but users
      are recommended to keep the default values unless they know
      what they are doing.
      
      The last patch is about advertising our own patchwork platform
      (thanks to Sven Eckelmann for having set that up!) in the
      MAINTAINERS file.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7da5ee09
    • Zhang Shengju's avatar
      net: pktgen: use reset to set mac header · c145aeb3
      Zhang Shengju authored
      Since offset is zero, it's not necessary to use set function.
      Signed-off-by: default avatarZhang Shengju <zhangshengju@cmss.chinamobile.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c145aeb3
    • David S. Miller's avatar
      sch_mqprio: Fix build with older gcc. · 241deec9
      David S. Miller authored
        CC [M]  net/sched/sch_mqprio.o
      net/sched/sch_mqprio.c: In function ?mqprio_init?:
      net/sched/sch_mqprio.c:145: error: unknown field ?tc? specified in initializer
      net/sched/sch_mqprio.c:145: warning: missing braces around initializer
      net/sched/sch_mqprio.c:145: warning: (near initialization for ?tc.<anonymous>?)
      make[2]: *** [net/sched/sch_mqprio.o] Error 1
      make[1]: *** [net/sched] Error 2
      make: *** [net] Error 2
      
      Several people reported this, surround the unnamed union
      member initialization with braces to fix.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      241deec9
    • Sergei Shtylyov's avatar
      of_mdio: kill useless variable in of_mdiobus_register() · 2fca6d28
      Sergei Shtylyov authored
      of_mdiobus_register()  declares the 'paddr' variable to hold the result of
      the of_get_property()  but only uses it once after that while the function
      can be called directly from the *if* statement. Remove that variable and
      switch to calling of_find_property() instead since  we don't care about
      the "reg" property's value anyway...
      Signed-off-by: default avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2fca6d28
    • David S. Miller's avatar
      Merge branch 'qed-next' · 87f761ec
      David S. Miller authored
      Yuval Mintz says:
      
      ====================
      qed: Attention support patch series
      
      Until now we've only enabled attention generation for the sake of
      management firmware indications [required for link notifications].
      
      This series enables [almost] all the attention sources of the HW,
      currently for the sake of logging information relating to issues
      experienced by HW. In future, infrastructure laid here would also be used
      for the sake of the recovery process.
      
      The first patch in the series is a semantic alignemnt of the code.
      The later 3 patches incremently create said infrastructure and enrich
      the logged information.
      Notice #3 contains quite a bit of structures [consisting of ~1K lines]
      that will eventually be removed and incorporated in the binary fw file.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      87f761ec
    • Yuval Mintz's avatar
      qed: Print additional HW attention info · b4149dc7
      Yuval Mintz authored
      This patch utilizes the attention infrastructure to log additional
      information that relates only to specific HW blocks.
      For some of those HW blocks, it also stops automatically disabling the
      attention generation as the attention is considered benign and thus
      should only be logged; No fear of it flooding the system.
      Signed-off-by: default avatarYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b4149dc7
    • Yuval Mintz's avatar
      qed: Print HW attention reasons · ff38577a
      Yuval Mintz authored
      Each HW block contains common information about attention reasons,
      raising a bit for each one of the different sub-reasons that caused it
      to raise an attention.
      
      This patch extends the infrastructure by allowing logging of the various
      reasons causing the HW blocks to generate an attention.
      Signed-off-by: default avatarYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ff38577a
    • Yuval Mintz's avatar
      qed: Add support for HW attentions · 0d956e8a
      Yuval Mintz authored
      HW is capable of generating attentnions for a multitude of reasons,
      but current driver is enabling attention generation only for management
      firmware [required for link notifications].
      
      This patch enables almost all of the possible reasons for HW attentions,
      logging the HW block generating the attention and preventing further
      attentions from that source [to prevent possible attention flood].
      It also lays the infrastructure for additional exploration of the various
      attentions.
      Signed-off-by: default avatarYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0d956e8a
    • Yuval Mintz's avatar
      4ac801b7
    • WANG Cong's avatar
      net: remove skb_sender_cpu_clear() · 64d4e343
      WANG Cong authored
      After commit 52bd2d62 ("net: better skb->sender_cpu and skb->napi_id cohabitation")
      skb_sender_cpu_clear() becomes empty and can be removed.
      
      Cc: Eric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      64d4e343
    • David S. Miller's avatar
      Merge branch 'mlx5-next' · 8b4837c8
      David S. Miller authored
      Saeed Mahameed says:
      
      ====================
      mlx5 driver updates
      
      This series includes some bug fixes and updates for the mlx5 core
      and ethernet driver.
      
      From Gal, two fixes that protects the update CQ moderation flows
      when it is not allowed.
      
      From Moshe, two fixes for the core and ethernet driver in
      non-cached(NC) and write combining(WC) buffers mappings,
      which prevents the driver from double memory mappings.
      
      From Or, reduce the firmware command completion timeout.
      
      From Tariq, several small trivial fixes.
      
      Changes from v0:
      	- "Fix global UAR mapping" commit messages updated to explain ARCH_HAS_IOREMAP_WC usage.
      	- rebased to commit 8d3f2806 'Merge branch ethtool-ksettings'
      
      Changes from v1:
      	- Removed ARCH_HAS_IOREMAP_WC config flag from "Fix global UAR mapping" commit,	as it was not accurate to use it.
      	- Squashed "Fix global UAR mapping" and "net/mlx5: Avoid double mapping of io mapped memory"
      	- Added more info for "Fix global UAR mapping" in commit message
      
      Changes from v2:
      	- None. resubmission per Dave's request due to two parallel submissions to mlx5 driver.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8b4837c8
    • Moshe Lazer's avatar
      net/mlx5: Fix global UAR mapping · 0ba42241
      Moshe Lazer authored
      Avoid double mapping of io mapped memory, Device page may be
      mapped to non-cached(NC) or to write-combining(WC).
      The code before this fix tries to map it both to WC and NC
      contrary to what stated in Intel's software developer manual.
      
      Here we remove the global WC mapping of all UARS
      "dev->priv.bf_mapping", since UAR mapping should be decided
      per UAR (e.g we want different mappings for EQs, CQs vs QPs).
      
      Caller will now have to choose whether to map via
      write-combining API or not.
      
      mlx5e SQs will choose write-combining in order to perform
      BlueFlame writes.
      
      Fixes: 88a85f99 ('TX latency optimization to save DMA reads')
      Signed-off-by: default avatarMoshe Lazer <moshel@mellanox.com>
      Reviewed-by: default avatarAchiad Shochat <achiad@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0ba42241
    • Or Gerlitz's avatar
      net/mlx5: Make command timeout way shorter · 6b6c07bd
      Or Gerlitz authored
      The command timeout is terribly long, whole two hours. Make it 60s so if
      things do go wrong, the user gets feedback in relatively short time, so
      they can take corrective actions and/or investigate using tools and such.
      
      Fixes: e126ba97 ('mlx5: Add driver for Mellanox Connect-IB adapters')
      Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6b6c07bd
    • Gal Pressman's avatar
      net/mlx5e: Don't modify CQ before it was created · 2fcb92fb
      Gal Pressman authored
      Calling mlx5e_set_coalesce while the interface is down will result in
      modifying CQs that don't exist.
      
      Fixes: f62b8bb8 ('net/mlx5: Extend mlx5_core to support ConnectX-4
      Ethernet functionality')
      Signed-off-by: default avatarGal Pressman <galp@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2fcb92fb
    • Gal Pressman's avatar
      net/mlx5e: Don't try to modify CQ moderation if it is not supported · 7524a5d8
      Gal Pressman authored
      If CQ moderation is not supported by the device, print a warning on
      netdevice load, and return error when trying to modify/query cq
      moderation via ethtool.
      
      Fixes: f62b8bb8 ('net/mlx5: Extend mlx5_core to support ConnectX-4
      Ethernet functionality')
      Signed-off-by: default avatarGal Pressman <galp@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7524a5d8
    • Tariq Toukan's avatar
      net/mlx5e: Set drop RQ's necessary parameters only · 556dd1b9
      Tariq Toukan authored
      By its role, there is no need to set all the other parameters
      for the drop RQ.
      Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      556dd1b9
    • Tariq Toukan's avatar
      net/mlx5e: Move common case counters within sq_stats struct · c89fb18b
      Tariq Toukan authored
      For data cache locality considerations, we moved the nop and
      csum_offload_inner within sq_stats struct as they are more
      commonly accessed in xmit path.
      Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c89fb18b
    • Tariq Toukan's avatar
      net/mlx5e: Changed naming convention of tx queues in ethtool stats · 3b619524
      Tariq Toukan authored
      Instead of the pair (channel, tc), we now use a single number that
      goes over all tx queues of a TC, for all TCs.
      Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3b619524
    • Tariq Toukan's avatar
      net/mlx5e: Placement changed for carrier state updates · ce89ef36
      Tariq Toukan authored
      More proper to declare carrier state UP only after the channels
      are ready for traffic.
      Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ce89ef36
    • Tariq Toukan's avatar
      net/mlx5e: Replace async events spinlock with synchronize_irq() · daa21560
      Tariq Toukan authored
      We only need to flush the irq handler to make sure it does not
      queue a work into the global work queue after we start to flush it.
      So using synchronize_irq() is more appropriate than a spin lock.
      Signed-off-by: default avatarTariq Toukan <tariqt@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      daa21560
    • David Ahern's avatar
      net: ipv6/l3mdev: Move host route on saved address if necessary · 4f25a111
      David Ahern authored
      Commit f1705ec1 allows IPv6 addresses to be retained on a link down.
      The address can have a cached host route which can point to the wrong
      FIB table if the L3 enslavement is changed (e.g., route can point to local
      table instead of VRF table if device is added to an L3 domain).
      
      On link up check the table of the cached host route against the FIB
      table associated with the device and correct if needed.
      Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4f25a111
    • David S. Miller's avatar
      Merge branch 'net-timestamps-y2038' · 292264de
      David S. Miller authored
      Deepa Dinamani says:
      
      ====================
      Convert network timestamps to be y2038 safe
      
      Introduction:
      
      The series is aimed at transitioning network timestamps to being
      y2038 safe.
      All patches can be reviewed and merged independently.
      
      Socket timestamps and ioctl calls will be handled separately.
      
      Thanks to Arnd Bergmann for discussing solution options with me.
      
      Solution:
      
      Data type struct timespec is not y2038 safe.
      Replace timespec with struct timespec64 which is y2038 safe.
      
      Changes v1 -> v2:
        Move and rename inet_current_time() as discussed
        Squash patches 1 and 2
        Reword commit text for patch 2/3
        Carry over review tags
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      292264de
    • Deepa Dinamani's avatar
      net: sctp: Convert log timestamps to be y2038 safe · 6497c7e6
      Deepa Dinamani authored
      SCTP probe log timestamps use struct timespec which is
      not y2038 safe.
      Use struct timespec64 which is 2038 safe instead.
      
      Use monotonic time instead of real time as only time
      differences are logged.
      Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
      Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Cc: Vlad Yasevich <vyasevich@gmail.com>
      Cc: Neil Horman <nhorman@tuxdriver.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: linux-sctp@vger.kernel.org
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6497c7e6
    • Deepa Dinamani's avatar
      net: ipv4: tcp_probe: Replace timespec with timespec64 · b1b270d8
      Deepa Dinamani authored
      TCP probe log timestamps use struct timespec which is
      not y2038 safe. Even though timespec might be good enough here
      as it is used to represent delta time, the plan is to get rid
      of all uses of timespec in the kernel.
      Replace with struct timespec64 which is y2038 safe.
      
      Prints still use unsigned long format and type.
      Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
      Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Cc: James Morris <jmorris@namei.org>
      Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
      Cc: Patrick McHardy <kaber@trash.net>
      Acked-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b1b270d8
    • Deepa Dinamani's avatar
      net: ipv4: Convert IP network timestamps to be y2038 safe · 822c8685
      Deepa Dinamani authored
      ICMP timestamp messages and IP source route options require
      timestamps to be in milliseconds modulo 24 hours from
      midnight UT format.
      
      Add inet_current_timestamp() function to support this. The function
      returns the required timestamp in network byte order.
      
      Timestamp calculation is also changed to call ktime_get_real_ts64()
      which uses struct timespec64. struct timespec64 is y2038 safe.
      Previously it called getnstimeofday() which uses struct timespec.
      struct timespec is not y2038 safe.
      Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
      Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
      Cc: James Morris <jmorris@namei.org>
      Cc: Patrick McHardy <kaber@trash.net>
      Acked-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      822c8685
    • David S. Miller's avatar
      Merge branch 'ife' · e9c0d61d
      David S. Miller authored
      Jamal Hadi Salim says:
      
      ====================
      net_sched: Add support for IFE action
      
      As agreed at netconf in Seville, here's the patch finally (1 year
      was just too long to wait for an ethertype. Now we are just going
      have the user configure one).
      Described in netdev01 paper:
                  "Distributing Linux Traffic Control Classifier-Action Subsystem"
                   Authors: Jamal Hadi Salim and Damascene M. Joachimpillai
      
      The original motivation and deployment of this work was to horizontally
      scale packet processing at scope of a chasis or rack. This means one
      could take a tc policy and split it across machines connected over
      L2. The paper refers to this as "pipeline stage indexing". Other
      use cases which evolved out of the original intent include but are
      not limited to carrying OAM information, carrying exception handling
      metadata, carrying programmed authentication and authorization information,
      encapsulating programmed compliance information, service IDs etc.
      Read the referenced paper for more details.
      
      The architecture allows for incremental updates for new metadatum support
      to cover different use cases.
      This patch set includes support for basic skb metadatum.
      Followup patches will have more examples of metadata and other features.
      
      v4 changes:
      Integrate more feedback from Cong
      
      v3 changes:
      Integrate with the new namespace changes
      Remove skbhash and queue mapping metadata (but keep their claim for ids)
      Integrate feedback from Cong
      Integrate feedback from Daniel
      
      v2 changes:
      Remove module option for an upper bound of metadata
      Integrate feedback from Cong
      Integrate feedback from Daniel
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e9c0d61d
    • Jamal Hadi Salim's avatar
      Support to encoding decoding skb prio on IFE action · 200e10f4
      Jamal Hadi Salim authored
          Example usage:
          Set the skb priority using skbedit then allow it to be encoded
      
          sudo tc qdisc add dev $ETH root handle 1: prio
          sudo tc filter add dev $ETH parent 1: protocol ip prio 10 \
          u32 match ip protocol 1 0xff flowid 1:2 \
          action skbedit prio 17 \
          action ife encode \
          allow prio \
          dst 02:15:15:15:15:15
      
          Note: You dont need the skbedit action if you are already encoding the
          skb priority earlier. A zero skb priority will not be sent
      
          Alternative hard code static priority of decimal 33 (unlike skbedit)
          then mark of 0x12 every time the filter matches
      
          sudo $TC filter add dev $ETH parent 1: protocol ip prio 10 \
          u32 match ip protocol 1 0xff flowid 1:2 \
          action ife encode \
          type 0xDEAD \
          use prio 33 \
          use mark 0x12 \
          dst 02:15:15:15:15:15
      Signed-off-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      200e10f4
    • Jamal Hadi Salim's avatar
      Support to encoding decoding skb mark on IFE action · 084e2f65
      Jamal Hadi Salim authored
      Example usage:
      Set the skb using skbedit then allow it to be encoded
      
      sudo tc qdisc add dev $ETH root handle 1: prio
      sudo tc filter add dev $ETH parent 1: protocol ip prio 10 \
      u32 match ip protocol 1 0xff flowid 1:2 \
      action skbedit mark 17 \
      action ife encode \
      allow mark \
      dst 02:15:15:15:15:15
      
      Note: You dont need the skbedit action if you are already encoding the
      skb mark earlier. A zero skb mark, when seen, will not be encoded.
      
      Alternative hard code static mark of 0x12 every time the filter matches
      
      sudo $TC filter add dev $ETH parent 1: protocol ip prio 10 \
      u32 match ip protocol 1 0xff flowid 1:2 \
      action ife encode \
      type 0xDEAD \
      use mark 0x12 \
      dst 02:15:15:15:15:15
      Signed-off-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      084e2f65
    • Jamal Hadi Salim's avatar
      introduce IFE action · ef6980b6
      Jamal Hadi Salim authored
      This action allows for a sending side to encapsulate arbitrary metadata
      which is decapsulated by the receiving end.
      The sender runs in encoding mode and the receiver in decode mode.
      Both sender and receiver must specify the same ethertype.
      At some point we hope to have a registered ethertype and we'll
      then provide a default so the user doesnt have to specify it.
      For now we enforce the user specify it.
      
      Lets show example usage where we encode icmp from a sender towards
      a receiver with an skbmark of 17; both sender and receiver use
      ethertype of 0xdead to interop.
      
      YYYY: Lets start with Receiver-side policy config:
      xxx: add an ingress qdisc
      sudo tc qdisc add dev $ETH ingress
      
      xxx: any packets with ethertype 0xdead will be subjected to ife decoding
      xxx: we then restart the classification so we can match on icmp at prio 3
      sudo $TC filter add dev $ETH parent ffff: prio 2 protocol 0xdead \
      u32 match u32 0 0 flowid 1:1 \
      action ife decode reclassify
      
      xxx: on restarting the classification from above if it was an icmp
      xxx: packet, then match it here and continue to the next rule at prio 4
      xxx: which will match based on skb mark of 17
      sudo tc filter add dev $ETH parent ffff: prio 3 protocol ip \
      u32 match ip protocol 1 0xff flowid 1:1 \
      action continue
      
      xxx: match on skbmark of 0x11 (decimal 17) and accept
      sudo tc filter add dev $ETH parent ffff: prio 4 protocol ip \
      handle 0x11 fw flowid 1:1 \
      action ok
      
      xxx: Lets show the decoding policy
      sudo tc -s filter ls dev $ETH parent ffff: protocol 0xdead
      xxx:
      filter pref 2 u32
      filter pref 2 u32 fh 800: ht divisor 1
      filter pref 2 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1  (rule hit 0 success 0)
        match 00000000/00000000 at 0 (success 0 )
              action order 1: ife decode action reclassify
               index 1 ref 1 bind 1 installed 14 sec used 14 sec
               type: 0x0
               Metadata: allow mark allow hash allow prio allow qmap
              Action statistics:
              Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
              backlog 0b 0p requeues 0
      xxx:
      Observe that above lists all metadatum it can decode. Typically these
      submodules will already be compiled into a monolithic kernel or
      loaded as modules
      
      YYYY: Lets show the sender side now ..
      
      xxx: Add an egress qdisc on the sender netdev
      sudo tc qdisc add dev $ETH root handle 1: prio
      xxx:
      xxx: Match all icmp packets to 192.168.122.237/24, then
      xxx: tag the packet with skb mark of decimal 17, then
      xxx: Encode it with:
      xxx:	ethertype 0xdead
      xxx:	add skb->mark to whitelist of metadatum to send
      xxx:	rewrite target dst MAC address to 02:15:15:15:15:15
      xxx:
      sudo $TC filter add dev $ETH parent 1: protocol ip prio 10  u32 \
      match ip dst 192.168.122.237/24 \
      match ip protocol 1 0xff \
      flowid 1:2 \
      action skbedit mark 17 \
      action ife encode \
      type 0xDEAD \
      allow mark \
      dst 02:15:15:15:15:15
      
      xxx: Lets show the encoding policy
      sudo tc -s filter ls dev $ETH parent 1: protocol ip
      xxx:
      filter pref 10 u32
      filter pref 10 u32 fh 800: ht divisor 1
      filter pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:2  (rule hit 0 success 0)
        match c0a87aed/ffffffff at 16 (success 0 )
        match 00010000/00ff0000 at 8 (success 0 )
      
      	action order 1:  skbedit mark 17
      	 index 6 ref 1 bind 1
       	Action statistics:
      	Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
      	backlog 0b 0p requeues 0
      
      	action order 2: ife encode action pipe
      	 index 3 ref 1 bind 1
      	 dst MAC: 02:15:15:15:15:15 type: 0xDEAD
       	 Metadata: allow mark
       	Action statistics:
      	Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
      	backlog 0b 0p requeues 0
      xxx:
      
      test by sending ping from sender to destination
      Signed-off-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ef6980b6