diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2017-01-31 22:11:20 +0100 |
---|---|---|
committer | Hans Dedecker <dedeckeh@gmail.com> | 2017-01-31 22:11:20 +0100 |
commit | df5042974622d72ce2424de8ef532941ac4f7fc9 (patch) | |
tree | 3581d664e1bce8d63dbaaaa2434ef52899130825 /src/odhcpd.h | |
parent | 83d72cf224956eb08453051744649df89b217203 (diff) |
odhcpd: properly handle netlink messages (FS#388)
Use libnl-tiny to construct and process netlink messages when
manipulating IPv6 routes and fetching IPv6 addresses.
This fixes lingering netlink error messages on the netlink socket
in case route deletion failed causing fetching of IPv6 addresses
to be aborted and odhcpd faultly assuming no IPv6 addresses being
present on the interface.
Diffstat (limited to 'src/odhcpd.h')
-rw-r--r-- | src/odhcpd.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/odhcpd.h b/src/odhcpd.h index 043360b..a2ef9f7 100644 --- a/src/odhcpd.h +++ b/src/odhcpd.h @@ -59,6 +59,7 @@ struct interface; +struct nl_sock; extern struct list_head leases; struct odhcpd_event { @@ -185,10 +186,11 @@ extern struct list_head interfaces; // Exported main functions -int odhcpd_open_rtnl(void); +struct nl_sock *odhcpd_open_rtnl(int protocol, int groups); int odhcpd_register(struct odhcpd_event *event); void odhcpd_process(struct odhcpd_event *event); +struct nl_sock *odhcpd_create_nl_socket(int protocol, int groups); ssize_t odhcpd_send(int socket, struct sockaddr_in6 *dest, struct iovec *iov, size_t iov_len, const struct interface *iface); @@ -201,9 +203,9 @@ int odhcpd_get_mac(const struct interface *iface, uint8_t mac[6]); struct interface* odhcpd_get_interface_by_index(int ifindex); struct interface* odhcpd_get_master_interface(void); int odhcpd_urandom(void *data, size_t len); -void odhcpd_setup_route(const struct in6_addr *addr, int prefixlen, +int odhcpd_setup_route(const struct in6_addr *addr, int prefixlen, const struct interface *iface, const struct in6_addr *gw, - int metric, bool add); + uint32_t metric, bool add); void odhcpd_run(void); time_t odhcpd_time(void); |