summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Kagan2018-06-01 08:59:01 +0200
committerMichael Brown2018-07-07 21:19:14 +0200
commit16d7495308058fb921b67a5ceddcbe169489787b (patch)
treee0f8182f16aa2710d3e42e92a98ce7b60c46f600
parent[efi] Exclude link-layer header length from MaxPacketSize (diff)
downloadipxe-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.c18
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;
}