From: Ben Pfaff Date: Mon, 7 Oct 2013 21:11:40 +0000 (-0700) Subject: netlink: New function nl_msg_put_unspec_zero(). X-Git-Tag: sliver-openvswitch-2.0.90-1~5^2~43 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=9ddf12cc12520acd7d09a8dfca74379faf0acf09;p=sliver-openvswitch.git netlink: New function nl_msg_put_unspec_zero(). This function already had a few potential users, which this commit converts. An upcoming commit adds more users. Signed-off-by: Ben Pfaff --- diff --git a/lib/netlink.c b/lib/netlink.c index 40477eaec..680c67689 100644 --- a/lib/netlink.c +++ b/lib/netlink.c @@ -220,6 +220,18 @@ nl_msg_put_unspec_uninit(struct ofpbuf *msg, uint16_t type, size_t size) return nla + 1; } +/* Appends a Netlink attribute of the given 'type' and room for 'size' bytes of + * data as its payload, plus Netlink padding if needed, to the tail end of + * 'msg', reallocating and copying its data if necessary. Returns a pointer to + * the first byte of data in the attribute, which is zeroed. */ +void * +nl_msg_put_unspec_zero(struct ofpbuf *msg, uint16_t type, size_t size) +{ + void *data = nl_msg_put_unspec_uninit(msg, type, size); + memset(data, 0, size); + return data; +} + /* Appends a Netlink attribute of the given 'type' and the 'size' bytes of * 'data' as its payload, to the tail end of 'msg', reallocating and copying * its data if necessary. Returns a pointer to the first byte of data in the diff --git a/lib/netlink.h b/lib/netlink.h index 21d49d38f..1a1c0de1e 100644 --- a/lib/netlink.h +++ b/lib/netlink.h @@ -59,6 +59,7 @@ void *nl_msg_push_uninit(struct ofpbuf *, size_t); /* Appending attributes. */ void *nl_msg_put_unspec_uninit(struct ofpbuf *, uint16_t type, size_t); +void *nl_msg_put_unspec_zero(struct ofpbuf *, uint16_t type, size_t); void nl_msg_put_unspec(struct ofpbuf *, uint16_t type, const void *, size_t); void nl_msg_put_flag(struct ofpbuf *, uint16_t type); void nl_msg_put_u8(struct ofpbuf *, uint16_t type, uint8_t value); diff --git a/lib/odp-util.c b/lib/odp-util.c index 6ac3853aa..9c63e9a4c 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -1392,7 +1392,7 @@ generate_all_wildcard_mask(struct ofpbuf *ofp, const struct nlattr *key) int size = nl_attr_get_size(key); if (odp_flow_key_attr_len(type) >=0) { - memset(nl_msg_put_unspec_uninit(ofp, type, size), 0, size); + nl_msg_put_unspec_zero(ofp, type, size); } else { size_t nested_mask; @@ -2563,9 +2563,8 @@ odp_flow_key_from_flow__(struct ofpbuf *buf, const struct flow *data, flow->dl_type == htons(ETH_TYPE_RARP)) { struct ovs_key_arp *arp_key; - arp_key = nl_msg_put_unspec_uninit(buf, OVS_KEY_ATTR_ARP, - sizeof *arp_key); - memset(arp_key, 0, sizeof *arp_key); + arp_key = nl_msg_put_unspec_zero(buf, OVS_KEY_ATTR_ARP, + sizeof *arp_key); arp_key->arp_sip = data->nw_src; arp_key->arp_tip = data->nw_dst; arp_key->arp_op = htons(data->nw_proto); @@ -3436,9 +3435,8 @@ commit_mpls_action(const struct flow *flow, struct flow *base, case 1: { struct ovs_action_push_mpls *mpls; - mpls = nl_msg_put_unspec_uninit(odp_actions, OVS_ACTION_ATTR_PUSH_MPLS, - sizeof *mpls); - memset(mpls, 0, sizeof *mpls); + mpls = nl_msg_put_unspec_zero(odp_actions, OVS_ACTION_ATTR_PUSH_MPLS, + sizeof *mpls); mpls->mpls_ethertype = flow->dl_type; mpls->mpls_lse = flow->mpls_lse; break;