Re: [RFC] correctly pass s390 netconfig to loader and NM (#595388, #595382)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



You can probably disregard the previous message as I see these changes made
their way in to other patches.

On Fri, 11 Jun 2010, David Cantrell wrote:

Comments below.

On Fri, 28 May 2010, Steffen Maier wrote:

---
loader/linuxrc.s390 |   44 +-------------------------------------------
loader/loader.c     |   16 ++++++++++++++++
loader/net.c        |   21 +++++++--------------
3 files changed, 24 insertions(+), 57 deletions(-)

diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390
index 99e5192..a5cedaf 100644
--- a/loader/linuxrc.s390
+++ b/loader/linuxrc.s390
@@ -2971,49 +2971,7 @@ done
#    [ "$ipv6" ] && echo "IPV6=yes"

# transfer options into install environment
-cat > /tmp/install.cfg << EOF
-LANG="$LANG"
-S390ARCH="$S390ARCH"
-TEXTDOMAIN="$TEXTDOMAIN"
-TEXTDOMAINDIR="$TEXTDOMAINDIR"
-PORTNAME="$PORTNAME"
-HOSTNAME="$HOSTNAME"
-DEVICE="$DEVICE"
-NETTYPE="$NETTYPE"
-IPADDR="$IPADDR"
-GATEWAY="$GATEWAY"
-MTU="$MTU"
-NETWORK="$NETWORK"
-NETMASK="$NETMASK"
-BROADCAST="$BROADCAST"
-SEARCHDNS="$SEARCHDNS"
-PEERID="$PEERID"
-SUBCHANNELS="$SUBCHANNELS"
-ONBOOT="yes"
-CTCPROT="$CTCPROT"
-EOF
-if [ "$ipv6" ]; then
-    DNS1=$(echo $DNS | cut -d ',' -f 1)
-    echo DNS=\"$DNS1\" >> /tmp/install.cfg
-    echo DNS1=\"$DNS1\" >> /tmp/install.cfg
-    echo DNS2=\"$(echo $DNS | cut -d ',' -f 2)\" >> /tmp/install.cfg
-else
-    DNS1=$(echo $DNS | cut -d ':' -f 1)
-    echo DNS=\"$DNS1\" >> /tmp/install.cfg
-    echo DNS1=\"$DNS1\" >> /tmp/install.cfg
-    echo DNS2=\"$(echo $DNS | cut -d ':' -f 2)\" >> /tmp/install.cfg
-fi
-cat >> /tmp/install.cfg << EOF
-export LANG PORTNAME S390ARCH TEXTDOMAIN TEXTDOMAINDIR
-export HOSTNAME DEVICE NETTYPE IPADDR GATEWAY MTU
-export NETWORK NETMASK BROADCAST DNS DNS1 DNS2 SEARCHDNS
-export PEERID ONBOOT SUBCHANNELS CTCPROT
-EOF
-# immediately read it in again to export these into the shell below
-. /tmp/install.cfg
-if [ -z "$testing" ]; then
-    cat /tmp/install.cfg >> /etc/profile
-fi # testing
+# loader now uses ifcfg instead of install.cfg to receive our network config

NETSCRIPTS="/etc/sysconfig/network-scripts"
IFCFGFILE="$NETSCRIPTS/ifcfg-$DEVICE"
diff --git a/loader/loader.c b/loader/loader.c
index 63594d8..19149d6 100644

This hunk was already removed in 3c3b439ec81da495f4bd5a1a0ca0fc5c13ccd234.

--- a/loader/loader.c
+++ b/loader/loader.c
@@ -692,6 +692,8 @@ static void readNetInfo(struct loaderData_s ** ld) {
            } else {
                if (!g_strcmp0(pair[0], "IPADDR")) {
                    loaderData->ipv4 = strdup(val);
+                    loaderData->ipinfo_set = 1;
+                    flags |= LOADER_FLAGS_IP_PARAM;
                } else if (!g_strcmp0(pair[0], "NETMASK")) {
                    loaderData->netmask = strdup(val);
                } else if (!g_strcmp0(pair[0], "GATEWAY")) {
@@ -718,15 +720,23 @@ static void readNetInfo(struct loaderData_s ** ld) {
                    loaderData->nettype = strdup(val);
                } else if (!g_strcmp0(pair[0], "CTCPROT")) {
                    loaderData->ctcprot = strdup(val);
+/* FIXME: That's deprecated install.cfg syntax.
+   ifcfg syntax is OPTIONS="layer2=X portno=Y" and we need to parse this.
+   Optionally just take the value of OPTIONS as string without parsing
+ and get rid of the layer2 and portno fields of loaderData_S and iface_t. + After all, OPTIONS can contain any qeth sysfs attribute not just layer2 or
+   portno.
                } else if (!g_strcmp0(pair[0], "LAYER2")) {
                    loaderData->layer2 = strdup(val);
                } else if (!g_strcmp0(pair[0], "PORTNO")) {
                    loaderData->portno = strdup(val);
+*/

Just remove these lines then.

                } else if (!g_strcmp0(pair[0], "MACADDR")) {
                    loaderData->macaddr = strdup(val);
                } else if (!g_strcmp0(pair[0], "HOSTNAME")) {
                    loaderData->hostname = strdup(val);
                }
+                /* FIXME: IPv6 support still missing */

No FIXMEs, please add IPv6 support if it's necessary.

            }

            g_free(val);
@@ -737,9 +747,11 @@ static void readNetInfo(struct loaderData_s ** ld) {
        line++;
    }

+    /* bogus and not compatible with ipv6
    if (loaderData->ipv4 && loaderData->netmask) {
        flags |= LOADER_FLAGS_HAVE_CMSCONF;
    }
+    */

If this hunk can be removed, remove it.

    free(cfgfile);
    g_strfreev(lines);
@@ -1470,6 +1482,10 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
                logMessage(INFO, "going to do getNetConfig");

/* s390 provides all config info by way of the CMS conf file */ + /* This is broken. Info can also be given by parm file or even
+                   interactively without any cms conf file.
+ Also it could be ipv4, ipv6, or both, so we cannot assume
+                   it's always both just because of that bogus flag. */

Please fix it if broken rather than explaining it is broken.

                if (FL_HAVE_CMSCONF(flags)) {
                    loaderData->ipinfo_set = 1;
#ifdef ENABLE_IPV6
diff --git a/loader/net.c b/loader/net.c
index dd27916..a302e02 100644
--- a/loader/net.c
+++ b/loader/net.c
@@ -1412,27 +1412,20 @@ int writeEnabledNetInfo(iface_t *iface) {
        fprintf(fp, "CTCPROT=%s\n", iface->ctcprot);
    }

-    if (iface->layer2 && !strcmp(iface->layer2, "1")) {
-        osa_layer2 = 1;
-    }
-
-    if (iface->portno && !strcmp(iface->portno, "1")) {
-        osa_portno = 1;
-    }
-
-    if (osa_layer2 || osa_portno) {
+    /* don't (mis)understand layer2 and portno values, just pass them */
+    if (iface->layer2 || iface->portno) {
        fprintf(fp, "OPTIONS=\"");

-        if (osa_layer2) {
-            fprintf(fp, "layer2=1");
+        if (iface->layer2) {
+            fprintf(fp, "layer2=%s", iface->layer2);
        }

-        if (osa_layer2 && osa_portno) {
+        if (iface->layer2 && iface->portno) {
            fprintf(fp, " ");
        }

-        if (osa_portno) {
-            fprintf(fp, "portno=1");
+        if (iface->portno) {
+            fprintf(fp, "portno=%s", iface->portno);
        }

        fprintf(fp, "\"\n");


This last changeset for loader/net.c seems like the only valid part of this
entire patch.  Please update the patch if other parts are relevant.  The
layer2 and portno handling in net.c showed up in
9caaca40bcaffb502dc58659e828f97d78a2d0f8, so please make sure we don't regress
on that bug.  It appears as though how we handle those values has changed,
which is fine.



--
David Cantrell <dcantrell@xxxxxxxxxx>
Red Hat / Honolulu, HI

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux