diff options
author | Alex Wang <alexw@nicira.com> | 2015-07-24 14:03:06 -0700 |
---|---|---|
committer | Alex Wang <alexw@nicira.com> | 2015-07-28 09:27:06 -0700 |
commit | 7e9dcc0f9930cd86e9cfc88ec892de01f37adb1b (patch) | |
tree | cdd2a876f6108b6fc9c9b85e48ce86d0bbe2309e /lib/rtnetlink.h | |
parent | 1d3950e900da0f1ac05c77d7da8c061fc88ad6a9 (diff) | |
download | openvswitch-7e9dcc0f9930cd86e9cfc88ec892de01f37adb1b.tar.gz |
rtnetlink: Extend rtnetlink to support RTNLGRP_IPV4_IFADDR and
RTNLGRP_IPV6_IFADDR.
This commit renames the rtnetlink-link.{c,h} to rtnetlink.{c,h}
and extends the module to support RTNLGRP_IPV4_IFADDR and
RTNLGRP_IPV4_IFADDR multicast groups. A later patch will start
using this module to react to interface address changes.
Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/rtnetlink.h')
-rw-r--r-- | lib/rtnetlink.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/rtnetlink.h b/lib/rtnetlink.h new file mode 100644 index 000000000..f2da394cd --- /dev/null +++ b/lib/rtnetlink.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009, 2015 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 RTNETLINK_LINK_H +#define RTNETLINK_LINK_H 1 + +#include <stdbool.h> +#include <stdint.h> +#include <linux/if_ether.h> + +struct ofpbuf; +struct nln_notifier; + +/* These functions are Linux specific, so they should be used directly only by + * Linux-specific code. */ + +/* A digested version of an rtnetlink_link message sent down by the kernel to + * indicate that a network device's status (link or address) has been changed. + */ +struct rtnetlink_change { + /* Copied from struct nlmsghdr. */ + int nlmsg_type; /* e.g. RTM_NEWLINK, RTM_DELLINK. */ + + /* Common attributes. */ + int if_index; /* Index of network device. */ + const char *ifname; /* Name of network device. */ + + /* Network device link status. */ + int master_ifindex; /* Ifindex of datapath master (0 if none). */ + int mtu; /* Current MTU. */ + uint8_t addr[ETH_ALEN]; + unsigned int ifi_flags; /* Flags of network device. */ + + /* Network device address status. */ + /* xxx To be added when needed. */ +}; + +/* Function called to report that a netdev has changed. 'change' describes the + * specific change. It may be null if the buffer of change information + * overflowed, in which case the function must assume that every device may + * have changed. 'aux' is as specified in the call to + * rtnetlink_notifier_register(). */ +typedef +void rtnetlink_notify_func(const struct rtnetlink_change *change, + void *aux); + +bool rtnetlink_type_is_rtnlgrp_link(uint16_t type); +bool rtnetlink_type_is_rtnlgrp_addr(uint16_t type); +bool rtnetlink_parse(struct ofpbuf *buf, struct rtnetlink_change *change); +struct nln_notifier * +rtnetlink_notifier_create(rtnetlink_notify_func *, void *aux); +void rtnetlink_notifier_destroy(struct nln_notifier *); +void rtnetlink_run(void); +void rtnetlink_wait(void); +#endif /* rtnetlink.h */ |