struct rtnetlink *rtn;
rtn = xzalloc(sizeof *rtn);
- rtn->notify_sock = 0;
+ rtn->notify_sock = NULL;
rtn->multicast_group = multicast_group;
rtn->parse = parse;
rtn->change = change;
rtnetlink_notify_func *cb, void *aux)
{
if (!rtn->notify_sock) {
- int error = nl_sock_create(NETLINK_ROUTE, rtn->multicast_group, 0, 0,
- &rtn->notify_sock);
+ struct nl_sock *sock;
+ int error;
+
+ error = nl_sock_create(NETLINK_ROUTE, &sock);
+ if (!error) {
+ error = nl_sock_join_mcgroup(sock, rtn->multicast_group);
+ }
if (error) {
+ nl_sock_destroy(sock);
VLOG_WARN("could not create rtnetlink socket: %s",
strerror(error));
return error;
}
+ rtn->notify_sock = sock;
} else {
/* Catch up on notification work so that the new notifier won't
* receive any stale notifications. */