diff options
author | Roman Kagan | 2018-06-01 08:59:01 +0200 |
---|---|---|
committer | Michael Brown | 2018-07-07 21:19:14 +0200 |
commit | 16d7495308058fb921b67a5ceddcbe169489787b (patch) | |
tree | e0f8182f16aa2710d3e42e92a98ce7b60c46f600 | |
parent | [efi] Exclude link-layer header length from MaxPacketSize (diff) | |
download | ipxe-16d7495308058fb921b67a5ceddcbe169489787b.tar.gz ipxe-16d7495308058fb921b67a5ceddcbe169489787b.tar.xz ipxe-16d7495308058fb921b67a5ceddcbe169489787b.zip |
[rndis] Register netdev with MAC filled
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>
-rw-r--r-- | src/net/rndis.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/net/rndis.c b/src/net/rndis.c index 8c4fe8b3..8a58cb72 100644 --- a/src/net/rndis.c +++ b/src/net/rndis.c @@ -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; } |