]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: net_id - for ccw bus, shorten the identifier and stip leading zeros 2481/head
authorDimitri John Ledkov <xnox@ubuntu.com>
Fri, 29 Jan 2016 16:54:30 +0000 (17:54 +0100)
committerDimitri John Ledkov <xnox@ubuntu.com>
Fri, 29 Jan 2016 16:54:30 +0000 (17:54 +0100)
The commmon case default qeth link is enccw0.0.0600 is rather long.

Thus strip leading zeros (which doesn't make the bus_id unstable),
similar to the PCI domain case.

Also 'ccw' is redundant on S/390, as there aren't really other buses
available which could have qeth driver interfaces. Not sure why this
code is even compiled on non-s390[x] platforms. But to distinguish from
e.g. MAC stable names shorten the suffix to just 'c'.

Thus enccw0.0.0600 becomes enc600.

src/udev/udev-builtin-net_id.c

index 104d5111c59b5c5b9c93ab79adf43a1832470609..4f8a759d04109a89b03469cb89428112779087f4 100644 (file)
@@ -36,7 +36,7 @@
  *
  * Type of names:
  *   b<number>                             -- BCMA bus core number
- *   ccw<name>                             -- CCW bus group name
+ *   c<bus_id>                             -- CCW bus group name, without leading zeros [s390]
  *   o<index>[d<dev_port>]                 -- on-board device index number
  *   s<slot>[f<function>][d<dev_port>]     -- hotplug slot index number
  *   x<MAC>                                -- MAC address
@@ -430,8 +430,15 @@ static int names_ccw(struct  udev_device *dev, struct netnames *names) {
         if (!bus_id_len || bus_id_len < 8 || bus_id_len > 9)
                 return -EINVAL;
 
+        /* Strip leading zeros from the bus id for aesthetic purposes. This
+         * keeps the ccw names stable, yet much shorter in general case of
+         * bus_id 0.0.0600 -> 600. This is similar to e.g. how PCI domain is
+         * not prepended when it is zero.
+         */
+        bus_id += strspn(bus_id, ".0");
+
         /* Store the CCW bus-ID for use as network device name */
-        rc = snprintf(names->ccw_group, sizeof(names->ccw_group), "ccw%s", bus_id);
+        rc = snprintf(names->ccw_group, sizeof(names->ccw_group), "c%s", bus_id);
         if (rc >= 0 && rc < (int)sizeof(names->ccw_group))
                 names->type = NET_CCWGROUP;
         return 0;