Merge tag 'upstream/3.14'
[debian/elilo] / glue_netfs.c
index e47bcc8414747566fac0f3ed87a35d7012b07f03..eebfecc103ee692954ea8b48f77ca015f8c2346c 100644 (file)
@@ -64,6 +64,19 @@ static CHAR16 netfs_default_path[FILENAME_MAXLEN];
 
 static CHAR16 *hexa=L"0123456789ABCDEF";
 
+static VOID
+convert_mac2hex(UINT8 *hw_addr,INTN l, CHAR16 *str)
+{
+       UINTN i;
+
+       for (i=0 ; i < l; i++) {
+               str[3*i] = hexa[(hw_addr[i] & 0xf0)>>4];
+               str[3*i+1] = hexa[hw_addr[i] & 0x0f];
+               str[3*i+2] = ':';
+       }
+       str[3*l-1]='\0';
+}
+
 static VOID
 convert_ip2hex(UINT8 *ip, INTN l, CHAR16 *str)
 {
@@ -153,6 +166,8 @@ netfs_setdefaults(VOID *intf, config_file_t *config, CHAR16 *kname, UINTN maxlen
        set_var(VAR_NETFS_DOMAINAME, info.domainame);
 
        if (info.using_pxe) {
+               DBG_PRT((L"netfs_setdefaults: using_pxe"));
+
                status = netfs->netfs_query_layer(netfs, 0, NETFS_CONFIG_LAYER, maxlen, config[0].fname);
                if (EFI_ERROR(status)) {
                        StrnCpy(config[0].fname, NETFS_DEFAULT_CONFIG, maxlen-1);
@@ -181,6 +196,8 @@ netfs_setdefaults(VOID *intf, config_file_t *config, CHAR16 *kname, UINTN maxlen
 #  endif            
 
 #  define CONFIG_EXTENSION L".conf\0"
+
+               DBG_PRT((L"netfs_setdefaults: machine specific (!using_pxe)"));
                /*
                 * will try machine/subnet specific files first.
                 * the filenames are constructed based on the IP(v4) address
@@ -206,6 +223,12 @@ netfs_setdefaults(VOID *intf, config_file_t *config, CHAR16 *kname, UINTN maxlen
 
                StrnCpy(config[6].fname, str, maxlen-1);
                StrnCpy(config[6].fname+2, CONFIG_EXTENSION, 6);
+
+               /* use the MAC address as a possible file name as well */
+               convert_mac2hex(info.hw_addr,6,str);
+               StrnCpy(config[7].fname, str, maxlen-1);
+               StrnCpy(config[7].fname+17, CONFIG_EXTENSION, 6);
+
 #else
                StrnCpy(config[0].fname, NETFS_DEFAULT_CONFIG, maxlen-1);
                config[0].fname[maxlen-1] = CHAR_NULL;