X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fodhcpd.h;h=10f0edbe80bae725f98dced345f411097910bc9a;hp=8db3e7d2c7eee3c4dd32964a71222a58593a9748;hb=f4d38e0a853e933a4da54fde8ec2711b5dc5b741;hpb=4dc7edb23f1d587f9e09ad84ee200a9edf351d00 diff --git a/src/odhcpd.h b/src/odhcpd.h index 8db3e7d..10f0edb 100644 --- a/src/odhcpd.h +++ b/src/odhcpd.h @@ -16,11 +16,10 @@ #include #include #include -#include #include #include -#include "libubox/blobmsg.h" +#include #ifndef typeof #define typeof __typeof @@ -31,8 +30,8 @@ (type *)( (char *)ptr - offsetof(type,member) )) #endif -#include "libubox/list.h" -#include "libubox/uloop.h" +#include +#include #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) @@ -42,8 +41,6 @@ #define ND_OPT_DNS_SEARCH 31 #define RELAYD_BUFFER_SIZE 8192 -#define RELAYD_MAX_PREFIXES 8 -#define RELAYD_MAX_ADDRS 8 #define INFINITE_VALID(x) ((x) == 0) @@ -71,10 +68,16 @@ struct odhcpd_event { void (*recv_msgs)(struct odhcpd_event *e); }; +union if_addr { + struct in_addr in; + struct in6_addr in6; +}; struct odhcpd_ipaddr { - struct in6_addr addr; + union if_addr addr; uint8_t prefix; + + /* ipv6 only */ uint8_t dprefix; uint32_t preferred; uint32_t valid; @@ -95,6 +98,7 @@ enum odhcpd_assignment_flags { struct config { bool legacy; + bool main_dhcpv4; char *dhcp_cb; char *dhcp_statefile; int log_level; @@ -117,13 +121,13 @@ struct interface { struct list_head head; int ifindex; - char ifname[IF_NAMESIZE]; - char name[IF_NAMESIZE]; + char *ifname; + const char *name; // Runtime data struct uloop_timeout timer_rs; struct list_head ia_assignments; - struct odhcpd_ipaddr ia_addr[RELAYD_MAX_ADDRS]; + struct odhcpd_ipaddr *ia_addr; size_t ia_addr_len; // DHCPv4 @@ -150,13 +154,21 @@ struct interface { bool always_rewrite_dns; bool ra_not_onlink; bool ra_advrouter; + bool ra_useleasetime; bool no_dynamic_dhcp; + // RA int learn_routes; int default_router; - int managed; + int ra_managed; int route_preference; int ra_maxinterval; + int ra_mininterval; + int ra_lifetime; + uint32_t ra_reachabletime; + uint32_t ra_retranstime; + uint32_t ra_hoplimit; + int ra_mtu; // DHCPv4 struct in_addr dhcpv4_start; @@ -184,8 +196,9 @@ struct interface { extern struct list_head interfaces; -#define RELAYD_MANAGED_MFLAG 1 -#define RELAYD_MANAGED_NO_AFLAG 2 +#define RA_MANAGED_NO_MFLAG 0 +#define RA_MANAGED_MFLAG 1 +#define RA_MANAGED_NO_AFLAG 2 // Exported main functions @@ -197,9 +210,10 @@ struct nl_sock *odhcpd_create_nl_socket(int protocol); ssize_t odhcpd_send(int socket, struct sockaddr_in6 *dest, struct iovec *iov, size_t iov_len, const struct interface *iface); -ssize_t odhcpd_get_interface_addresses(int ifindex, - struct odhcpd_ipaddr *addrs, size_t cnt); -int odhcpd_get_linklocal_interface_address(int ifindex, struct in6_addr *lladdr); +ssize_t odhcpd_get_interface_addresses(int ifindex, bool v6, + struct odhcpd_ipaddr **addrs); +int odhcpd_get_interface_dns_addr(const struct interface *iface, + struct in6_addr *addr); struct interface* odhcpd_get_interface_by_name(const char *name); int odhcpd_get_interface_config(const char *ifname, const char *what); int odhcpd_get_mac(const struct interface *iface, uint8_t mac[6]);