]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
net/net: Add vlan information to net_ls_addr output
authorChad Kimes <chkimes@github.com>
Mon, 21 Mar 2022 21:29:15 +0000 (17:29 -0400)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 20 Apr 2022 11:42:30 +0000 (13:42 +0200)
Example output:
  grub> net_ls_addr
  efinet1 00:11:22:33:44:55 192.0.2.100 vlan100

Signed-off-by: Chad Kimes <chkimes@github.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/net/net.c
include/grub/net.h

index 681f91486264f33ae70e735bebe3bc32b2f89ce8..0315a568e544705be217539d5ff61dcb5c81d26e 100644 (file)
@@ -782,6 +782,20 @@ grub_net_hwaddr_to_str (const grub_net_link_level_address_t *addr, char *str)
   grub_printf (_("Unsupported hw address type %d\n"), addr->type);
 }
 
+void
+grub_net_vlan_to_str (grub_uint16_t vlantag, char *str)
+{
+  str[0] = 0;
+
+  /* 12 bits are used to identify the vlan in 802.1Q. */
+  vlantag = vlantag & 0x0fff;
+
+  if (vlantag == 0)
+    return;
+
+  grub_snprintf (str, GRUB_NET_MAX_STR_VLAN_LEN, "vlan%u", vlantag);
+}
+
 int
 grub_net_hwaddr_cmp (const grub_net_link_level_address_t *a,
                     const grub_net_link_level_address_t *b)
@@ -1251,9 +1265,12 @@ grub_cmd_listaddrs (struct grub_command *cmd __attribute__ ((unused)),
   {
     char bufh[GRUB_NET_MAX_STR_HWADDR_LEN];
     char bufn[GRUB_NET_MAX_STR_ADDR_LEN];
+    char bufv[GRUB_NET_MAX_STR_VLAN_LEN];
+
     grub_net_hwaddr_to_str (&inf->hwaddress, bufh);
     grub_net_addr_to_str (&inf->address, bufn);
-    grub_printf ("%s %s %s\n", inf->name, bufh, bufn);
+    grub_net_vlan_to_str (inf->vlantag, bufv);
+    grub_printf ("%s %s %s %s\n", inf->name, bufh, bufn, bufv);
   }
   return GRUB_ERR_NONE;
 }
index 099a7ce3092449aed263aa408c22af71c26feb9c..db21e792f0e0ffbb6e1ae45fba327f2b7013bd8f 100644 (file)
@@ -512,12 +512,18 @@ grub_net_addr_cmp (const grub_net_network_level_address_t *a,
 
 #define GRUB_NET_MAX_STR_HWADDR_LEN (sizeof ("XX:XX:XX:XX:XX:XX"))
 
+/* Max VLAN id = 4094 */
+#define GRUB_NET_MAX_STR_VLAN_LEN (sizeof ("vlanXXXX"))
+
 void
 grub_net_addr_to_str (const grub_net_network_level_address_t *target,
                      char *buf);
 void
 grub_net_hwaddr_to_str (const grub_net_link_level_address_t *addr, char *str);
 
+void
+grub_net_vlan_to_str (grub_uint16_t vlantag, char *str);
+
 grub_err_t
 grub_env_set_net_property (const char *intername, const char *suffix,
                            const char *value, grub_size_t len);