2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-29 15:28:56 +00:00
Files
openvswitch/lib/netlink-notifier.h
Jarno Rajahalme 77ee67e42d netlink-notifier: Support multiple groups.
A netlink notifier ('nln') already supports multiple notifiers.  This
patch allows each of these notifiers to subscribe to a different
multicast group.  Sharing a single socket for multiple event types
(each on their own multicast group) provides serialization of events
when reordering of different event types could be problematic.  For
example, if a 'create' event and 'delete' event are on different
netlink multicast group, we may want to process those events in the
order in which kernel issued them, rather than in the order we happen
to check for them.

Moving the multicast group argument from nln_create() to
nln_notifier_create() allows each notifier to specify a different
multicast group.  The parse callback needs to identify the group the
message belonged to by returning the corresponding group number, or 0
when an parse error occurs.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
2016-06-13 14:22:32 -07:00

52 lines
1.9 KiB
C

/*
* Copyright (c) 2009 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef NETLINK_NOTIFIER_H
#define NETLINK_NOTIFIER_H 1
/* These functions are Linux specific, so they should be used directly only by
* Linux-specific code. */
#include "openvswitch/list.h"
struct nln;
struct nln_notifier;
struct nlattr;
struct ofpbuf;
/* Function called to report netlink notifications. 'change' describes the
* specific change filled out by an nln_parse_func. It may be null if the
* buffer of change information overflowed, in which case the function must
* assume that everything may have changed. 'aux' is as specified in
* nln_notifier_register(). */
typedef void nln_notify_func(const void *change, void *aux);
/* Function called to parse incoming nln notifications. The 'buf' message
* should be parsed into 'change' as specified in nln_create().
* Returns the multicast_group the change belongs to, or 0 for a parse error.
*/
typedef int nln_parse_func(struct ofpbuf *buf, void *change);
struct nln *nln_create(int protocol, nln_parse_func *, void *change);
void nln_destroy(struct nln *);
struct nln_notifier *nln_notifier_create(struct nln *, int multicast_group,
nln_notify_func *, void *aux);
void nln_notifier_destroy(struct nln_notifier *);
void nln_run(struct nln *);
void nln_wait(struct nln *);
#endif /* netlink-notifier.h */