Page MenuHomeFreeBSD

D39874.diff
No OneTemporary

D39874.diff

diff --git a/lib/libifconfig/libifconfig_carp.c b/lib/libifconfig/libifconfig_carp.c
--- a/lib/libifconfig/libifconfig_carp.c
+++ b/lib/libifconfig/libifconfig_carp.c
@@ -55,7 +55,7 @@
{ .type = CARP_NL_STATE, .off = _OUT(carpr_state), .cb = snl_attr_get_uint32 },
{ .type = CARP_NL_ADVBASE, .off = _OUT(carpr_advbase), .cb = snl_attr_get_int32 },
{ .type = CARP_NL_ADVSKEW, .off = _OUT(carpr_advskew), .cb = snl_attr_get_int32 },
- { .type = CARP_NL_KEY, .off = _OUT(carpr_key), .cb = snl_attr_get_string },
+ { .type = CARP_NL_KEY, .off = _OUT(carpr_key), .cb = snl_attr_copy_string, .arg_u32 = CARP_KEY_LEN },
{ .type = CARP_NL_ADDR, .off = _OUT(carpr_addr), .cb = snl_attr_get_in_addr },
{ .type = CARP_NL_ADDR6, .off = _OUT(carpr_addr6), .cb = snl_attr_get_in6_addr },
};
@@ -176,6 +176,7 @@
&carpr->carpr_addr);
snl_add_msg_attr(&nw, CARP_NL_ADDR6, sizeof(carpr->carpr_addr6),
&carpr->carpr_addr6);
+ snl_add_msg_attr_string(&nw, CARP_NL_KEY, carpr->carpr_key);
hdr = snl_finalize_msg(&nw);
if (hdr == NULL) {
diff --git a/sys/netlink/netlink_snl.h b/sys/netlink/netlink_snl.h
--- a/sys/netlink/netlink_snl.h
+++ b/sys/netlink/netlink_snl.h
@@ -138,7 +138,12 @@
uint16_t type; /* Attribute type */
uint16_t off; /* field offset in the target structure */
snl_parse_attr_f *cb; /* parser function to call */
- const void *arg; /* Optional argument parser */
+
+ /* Optional parser argument */
+ union {
+ const void *arg;
+ const uint32_t arg_u32;
+ };
};
struct snl_hdr_parser {
@@ -588,6 +593,19 @@
return (true);
}
+static inline bool
+snl_attr_copy_string(struct snl_state *ss, struct nlattr *nla,
+ const void *arg, void *target)
+{
+ char *tmp;
+
+ if (snl_attr_get_string(ss, nla, NULL, &tmp)) {
+ strlcpy(target, tmp, (size_t)arg);
+ return (true);
+ }
+ return (false);
+}
+
static inline bool
snl_attr_get_nested(struct snl_state *ss, struct nlattr *nla, const void *arg, void *target)
{

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 25, 4:40 PM (22 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12773299
Default Alt Text
D39874.diff (1 KB)

Event Timeline