]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
macsec: report the offloading mode currently selected
authorAntoine Tenart <antoine.tenart@bootlin.com>
Tue, 3 Mar 2020 10:36:16 +0000 (11:36 +0100)
committerDavid Ahern <dsahern@gmail.com>
Wed, 4 Mar 2020 19:56:41 +0000 (19:56 +0000)
This patch adds support to report the MACsec offloading mode currently
being enabled, which as of now can either be 'off' or 'phy'. This
information is reported through the `ip macsec show` command:

  # ip macsec show
  18: macsec0: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off
      cipher suite: GCM-AES-128, using ICV length 16
      TXSC: 3e5035b67c860001 on SA 0
          0: PN 1, state on, key 00000000000000000000000000000000
      RXSC: b4969112700f0001, state on
          0: PN 1, state on, key 01000000000000000000000000000000
      offload: phy
  19: macsec1: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off
      cipher suite: GCM-AES-128, using ICV length 16
      TXSC: 3e5035b67c880001 on SA 0
          1: PN 1, state on, key 00000000000000000000000000000000
      RXSC: b4969112700f0001, state on
          1: PN 1, state on, key 01000000000000000000000000000000
      offload: off

Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
ip/ipmacsec.c

index ad6ad7d6b79fae6f9234522ac40dfbc20976b958..4327c796aa1ff4690cf2c70b9fc4b342d92c3d3b 100644 (file)
@@ -31,6 +31,11 @@ static const char * const validate_str[] = {
        [MACSEC_VALIDATE_STRICT] = "strict",
 };
 
+static const char * const offload_str[] = {
+       [MACSEC_OFFLOAD_OFF] = "off",
+       [MACSEC_OFFLOAD_PHY] = "phy",
+};
+
 struct sci {
        __u64 sci;
        __u16 port;
@@ -605,6 +610,14 @@ static const char *cs_id_to_name(__u64 cid)
        }
 }
 
+static const char *offload_to_str(__u8 offload)
+{
+       if (offload >= ARRAY_SIZE(offload_str))
+               return "(unknown)";
+
+       return offload_str[offload];
+}
+
 static void print_attrs(struct rtattr *attrs[])
 {
        print_flag(attrs, "protect", MACSEC_SECY_ATTR_PROTECT);
@@ -997,6 +1010,19 @@ static int process(struct nlmsghdr *n, void *arg)
        if (attrs[MACSEC_ATTR_RXSC_LIST])
                print_rxsc_list(attrs[MACSEC_ATTR_RXSC_LIST]);
 
+       if (attrs[MACSEC_ATTR_OFFLOAD]) {
+               struct rtattr *attrs_offload[MACSEC_OFFLOAD_ATTR_MAX + 1];
+               __u8 offload;
+
+               parse_rtattr_nested(attrs_offload, MACSEC_OFFLOAD_ATTR_MAX,
+                                   attrs[MACSEC_ATTR_OFFLOAD]);
+
+               offload = rta_getattr_u8(attrs_offload[MACSEC_OFFLOAD_ATTR_TYPE]);
+               print_string(PRINT_ANY, "offload",
+                            "    offload: %s ", offload_to_str(offload));
+               print_nl();
+       }
+
        close_json_object();
 
        return 0;