diff options
Diffstat (limited to 'usr/src/cmd/dlmgmtd')
| -rw-r--r-- | usr/src/cmd/dlmgmtd/dlmgmt_db.c | 26 | ||||
| -rw-r--r-- | usr/src/cmd/dlmgmtd/dlmgmt_util.c | 7 |
2 files changed, 28 insertions, 5 deletions
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_db.c b/usr/src/cmd/dlmgmtd/dlmgmt_db.c index 7cb9e2ce78..99307dbc03 100644 --- a/usr/src/cmd/dlmgmtd/dlmgmt_db.c +++ b/usr/src/cmd/dlmgmtd/dlmgmt_db.c @@ -814,6 +814,12 @@ parse_linkprops(char *buf, dlmgmt_link_t *linkp) curr = buf + i + 1; } + /* Correct any erroneous IPTUN datalink class constant in the file */ + if (linkp->ll_class == 0x60) { + linkp->ll_class = DATALINK_CLASS_IPTUN; + rewrite_needed = B_TRUE; + } + return (0); parse_fail: @@ -1119,8 +1125,8 @@ process_db_read(dlmgmt_db_req_t *req, FILE *fp) } link_in_file.ll_zoneid = req->ls_zoneid; - link_in_db = avl_find(&dlmgmt_name_avl, &link_in_file, - &name_where); + link_in_db = link_by_name(link_in_file.ll_link, + link_in_file.ll_zoneid); if (link_in_db != NULL) { /* * If the link in the database already has the flag @@ -1166,9 +1172,13 @@ process_db_read(dlmgmt_db_req_t *req, FILE *fp) newlink->ll_linkid = dlmgmt_nextlinkid; if (avl_find(&dlmgmt_id_avl, newlink, &id_where) != NULL) { + dlmgmt_log(LOG_WARNING, "Link ID %d is already" + " in use, destroying link %s", + newlink->ll_linkid, newlink->ll_link); link_destroy(newlink); continue; } + if ((req->ls_flags & DLMGMT_ACTIVE) && link_activate(newlink) != 0) { dlmgmt_log(LOG_WARNING, "Unable to activate %s", @@ -1176,8 +1186,18 @@ process_db_read(dlmgmt_db_req_t *req, FILE *fp) link_destroy(newlink); continue; } - avl_insert(&dlmgmt_name_avl, newlink, name_where); + avl_insert(&dlmgmt_id_avl, newlink, id_where); + /* + * link_activate call above can insert newlink in + * dlmgmt_name_avl tree when activating a link that is + * assigned to a NGZ. + */ + if (avl_find(&dlmgmt_name_avl, newlink, + &name_where) == NULL) + avl_insert(&dlmgmt_name_avl, newlink, + name_where); + dlmgmt_advance(newlink); newlink->ll_flags |= req->ls_flags; } diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_util.c b/usr/src/cmd/dlmgmtd/dlmgmt_util.c index 96b2b3b826..004c8f257b 100644 --- a/usr/src/cmd/dlmgmtd/dlmgmt_util.c +++ b/usr/src/cmd/dlmgmtd/dlmgmt_util.c @@ -367,7 +367,7 @@ int link_activate(dlmgmt_link_t *linkp) { int err = 0; - zoneid_t zoneid; + zoneid_t zoneid = ALL_ZONES; if (zone_check_datalink(&zoneid, linkp->ll_linkid) == 0) { /* @@ -379,7 +379,10 @@ link_activate(dlmgmt_link_t *linkp) err = EEXIST; goto done; } - avl_remove(&dlmgmt_name_avl, linkp); + + if (avl_find(&dlmgmt_name_avl, linkp, NULL) != NULL) + avl_remove(&dlmgmt_name_avl, linkp); + linkp->ll_zoneid = zoneid; avl_add(&dlmgmt_name_avl, linkp); avl_add(&dlmgmt_loan_avl, linkp); |
