diff options
author | Thomas Haller <thaller@redhat.com> | 2022-03-14 22:58:52 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-03-14 23:06:48 (GMT) |
commit | d78a6eb73e3d3e4e3e35aa3e6d3e5cacc8265644 (patch) | |
tree | deff95f8ebf0098b3a7e929cc729394305bf9277 /lib/route | |
parent | 57a6d510b6d2dc23ad63c1e16ab89a00ccc902f3 (diff) | |
download | libnl-d78a6eb73e3d3e4e3e35aa3e6d3e5cacc8265644.zip libnl-d78a6eb73e3d3e4e3e35aa3e6d3e5cacc8265644.tar.gz libnl-d78a6eb73e3d3e4e3e35aa3e6d3e5cacc8265644.tar.bz2 |
route/mdb: minor cleanup in "mdb.c"
Diffstat (limited to 'lib/route')
-rw-r--r-- | lib/route/mdb.c | 65 |
1 files changed, 31 insertions, 34 deletions
diff --git a/lib/route/mdb.c b/lib/route/mdb.c index fb39d20..3949bc4 100644 --- a/lib/route/mdb.c +++ b/lib/route/mdb.c @@ -113,6 +113,7 @@ static int mdb_clone(struct nl_object *_dst, struct nl_object *_src) nl_init_list_head(&dst->mdb_entry_list); nl_list_for_each_entry(entry, &src->mdb_entry_list, mdb_list) { struct rtnl_mdb_entry *copy = mdb_entry_clone(entry); + if (!copy) return -NLE_NOMEM; @@ -127,8 +128,8 @@ static int mdb_update(struct nl_object *old_obj, struct nl_object *new_obj) struct rtnl_mdb *old = (struct rtnl_mdb *) old_obj; struct rtnl_mdb *new = (struct rtnl_mdb *) new_obj; struct rtnl_mdb_entry *entry, *old_entry; - int action = new_obj->ce_msgtype; + if (new->ifindex != old->ifindex) return -NLE_OPNOTSUPP; @@ -136,6 +137,7 @@ static int mdb_update(struct nl_object *old_obj, struct nl_object *new_obj) case RTM_NEWMDB: nl_list_for_each_entry(entry, &new->mdb_entry_list, mdb_list) { struct rtnl_mdb_entry *copy = mdb_entry_clone(entry); + if (!copy) return -NLE_NOMEM; @@ -143,12 +145,11 @@ static int mdb_update(struct nl_object *old_obj, struct nl_object *new_obj) } break; case RTM_DELMDB: - entry = - nl_list_first_entry(&new->mdb_entry_list, - struct rtnl_mdb_entry, mdb_list); - nl_list_for_each_entry(old_entry, &old->mdb_entry_list, - mdb_list) { - if (old_entry->ifindex == entry->ifindex + entry = nl_list_first_entry(&new->mdb_entry_list, + struct rtnl_mdb_entry, + mdb_list); + nl_list_for_each_entry(old_entry, &old->mdb_entry_list, mdb_list) { + if ( old_entry->ifindex == entry->ifindex && !nl_addr_cmp(old_entry->addr, entry->addr)) { nl_list_del(&old_entry->mdb_list); break; @@ -183,7 +184,7 @@ static int mdb_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, return -NLE_NOMEM; err = nlmsg_parse(nlh, sizeof(struct br_port_msg), tb, MDBA_MAX, - mdb_policy); + mdb_policy); if (err < 0) goto errout; @@ -195,19 +196,20 @@ static int mdb_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, if (tb[MDBA_MDB]) { struct nlattr *db_attr[MDBA_MDB_MAX]; + nla_parse_nested(db_attr, MDBA_MDB_MAX, tb[MDBA_MDB], - mdb_db_policy); + mdb_db_policy); rem = nla_len(tb[MDBA_MDB]); for (nla = nla_data(tb[MDBA_MDB]); nla_ok(nla, rem); nla = nla_next(nla, &rem)) { - int rm = nla_len(nla); struct nlattr *nla2; + for (nla2 = nla_data(nla); nla_ok(nla2, rm); nla2 = nla_next(nla2, &rm)) { - struct rtnl_mdb_entry *entry = - rtnl_mdb_entry_alloc(); + struct rtnl_mdb_entry *entry = rtnl_mdb_entry_alloc(); + if (!entry) { goto errout; } @@ -225,19 +227,13 @@ static int mdb_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, entry->proto = ntohs(e->addr.proto); if (entry->proto == ETH_P_IP) { - entry->addr = - nl_addr_build(AF_INET, - (void *) &e->addr.u. - ip4, - sizeof(e->addr.u. - ip4)); + entry->addr = nl_addr_build(AF_INET, + &e->addr.u.ip4, + sizeof(e->addr.u.ip4)); } else if (entry->proto == ETH_P_IPV6) { - entry->addr = - nl_addr_build(AF_INET6, - (void *) &e->addr.u. - ip6, - sizeof(e->addr.u. - ip6)); + entry->addr = nl_addr_build(AF_INET6, + &e->addr.u.ip6, + sizeof(e->addr.u.ip6)); } if (!entry->addr) goto errout; @@ -260,7 +256,7 @@ static int mdb_request_update(struct nl_cache *cache, struct nl_sock *sk) } static void mdb_entry_dump_line(struct rtnl_mdb_entry *entry, - struct nl_dump_params *p) + struct nl_dump_params *p) { char buf[INET6_ADDRSTRLEN]; @@ -348,10 +344,11 @@ void rtnl_mdb_add_entry(struct rtnl_mdb *mdb, struct rtnl_mdb_entry *entry) } void rtnl_mdb_foreach_entry(struct rtnl_mdb *mdb, - void (*cb)(struct rtnl_mdb_entry *, void *), - void *arg) + void (*cb)(struct rtnl_mdb_entry *, void *), + void *arg) { struct rtnl_mdb_entry *entry; + nl_list_for_each_entry(entry, &mdb->mdb_entry_list, mdb_list) { cb(entry, arg); } @@ -389,8 +386,8 @@ static struct nl_object_ops mdb_obj_ops = { .oo_size = sizeof(struct rtnl_mdb), .oo_constructor = mdb_constructor, .oo_dump = { - [NL_DUMP_LINE] = mdb_dump_line, - }, + [NL_DUMP_LINE] = mdb_dump_line, + }, .oo_clone = mdb_clone, .oo_compare = mdb_compare, .oo_update = mdb_update, @@ -425,11 +422,11 @@ static struct nl_cache_ops rtnl_mdb_ops = { .co_name = "route/mdb", .co_hdrsize = sizeof(struct br_port_msg), .co_msgtypes = { - {RTM_NEWMDB, NL_ACT_NEW, "new"}, - {RTM_DELMDB, NL_ACT_DEL, "del"}, - {RTM_GETMDB, NL_ACT_GET, "get"}, - END_OF_MSGTYPES_LIST, - }, + { RTM_NEWMDB, NL_ACT_NEW, "new"}, + { RTM_DELMDB, NL_ACT_DEL, "del"}, + { RTM_GETMDB, NL_ACT_GET, "get"}, + END_OF_MSGTYPES_LIST, + }, .co_protocol = NETLINK_ROUTE, .co_groups = mdb_groups, .co_request_update = mdb_request_update, |