]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[rndis] Register netdev with MAC filled
authorRoman Kagan <rkagan@virtuozzo.com>
Fri, 1 Jun 2018 06:59:01 +0000 (09:59 +0300)
committerMichael Brown <mcb30@ipxe.org>
Sat, 7 Jul 2018 19:19:14 +0000 (20:19 +0100)
register_netdev expects ->hw_addr and ->ll_addr to be already filled,
so move it towards the end of register_rndis, after the respective
fields have been successfully queried from the underlying device.

Signed-off-by: Roman Kagan <rkagan@virtuozzo.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/rndis.c

index 8c4fe8b30cfa24bc1dc191ee4163066f92c766d4..8a58cb72e62e497df7db504e9e535c039070dd01 100644 (file)
@@ -973,13 +973,6 @@ int register_rndis ( struct rndis_device *rndis ) {
        /* Assign device name (for debugging) */
        rndis->name = netdev->dev->name;
 
-       /* Register network device */
-       if ( ( rc = register_netdev ( netdev ) ) != 0 ) {
-               DBGC ( rndis, "RNDIS %s could not register: %s\n",
-                      rndis->name, strerror ( rc ) );
-               goto err_register;
-       }
-
        /* Open RNDIS device to read MAC addresses */
        if ( ( rc = rndis->op->open ( rndis ) ) != 0 ) {
                DBGC ( rndis, "RNDIS %s could not open: %s\n",
@@ -1012,8 +1005,17 @@ int register_rndis ( struct rndis_device *rndis ) {
        /* Close RNDIS device */
        rndis->op->close ( rndis );
 
+       /* Register network device */
+       if ( ( rc = register_netdev ( netdev ) ) != 0 ) {
+               DBGC ( rndis, "RNDIS %s could not register: %s\n",
+                      rndis->name, strerror ( rc ) );
+               goto err_register;
+       }
+
        return 0;
 
+       unregister_netdev ( netdev );
+ err_register:
  err_query_link:
  err_query_current:
  err_query_permanent:
@@ -1021,8 +1023,6 @@ int register_rndis ( struct rndis_device *rndis ) {
  err_initialise:
        rndis->op->close ( rndis );
  err_open:
-       unregister_netdev ( netdev );
- err_register:
        return rc;
 }