221
221
#define OPT_TFTP_LC 38
222
222
#define OPT_CLEVERBIND 39
223
223
#define OPT_TFTP 40
224
#define OPT_CLIENT_SUBNET 41
225
#define OPT_QUIET_DHCP 42
226
#define OPT_QUIET_DHCP6 43
227
#define OPT_QUIET_RA 44
226
230
/* extra flags for my_syslog, we use a couple of facilities since they are known
227
231
not to occupy the same bits as priorities, no matter how syslog.h is set up. */
392
406
/* bits in flag param to IPv6 callbacks from iface_enumerate() */
393
407
#define IFACE_TENTATIVE 1
394
408
#define IFACE_DEPRECATED 2
409
#define IFACE_PERMANENT 4
397
412
#define SERV_FROM_RESOLV 1 /* 1 for servers from resolv, 0 for command line. */
440
455
union mysockaddr addr;
441
456
struct in_addr netmask; /* only valid for IPv4 */
442
int tftp_ok, dhcp_ok, mtu, done, dad, dns_auth, index, multicast_done;
457
int tftp_ok, dhcp_ok, mtu, done, warned, dad, dns_auth, index, multicast_done;
444
459
struct irec *next;
530
546
#ifdef HAVE_BROKEN_RTC
531
547
unsigned int length;
533
int hwaddr_len, hwaddr_type; /* hw_type used for iaid in v6 */
534
unsigned char hwaddr[DHCP_CHADDR_MAX]; /* also IPv6 address */
549
int hwaddr_len, hwaddr_type;
550
unsigned char hwaddr[DHCP_CHADDR_MAX];
535
551
struct in_addr addr, override, giaddr;
536
552
unsigned char *extradata;
537
553
unsigned int extradata_len, extradata_size;
538
554
int last_interface;
539
555
#ifdef HAVE_DHCP6
556
struct in6_addr addr6;
540
558
struct slaac_address {
541
559
struct in6_addr addr, local;
542
560
time_t ping_time;
711
struct ra_interface {
713
int interval, lifetime, prio;
714
struct ra_interface *next;
693
717
struct dhcp_context {
694
718
unsigned int lease_time, addr_epoch;
695
719
struct in_addr netmask, broadcast;
699
723
struct in6_addr start6, end6; /* range of available addresses */
700
724
struct in6_addr local6;
701
725
int prefix, if_index;
702
unsigned int valid, preferred;
703
time_t ra_time, ra_short_period_start;
726
unsigned int valid, preferred, saved_valid;
727
time_t ra_time, ra_short_period_start, address_lost_time;
704
728
char *template_interface;
708
732
struct dhcp_context *next, *current;
711
#define CONTEXT_STATIC 1
712
#define CONTEXT_NETMASK 2
713
#define CONTEXT_BRDCAST 4
714
#define CONTEXT_PROXY 8
715
#define CONTEXT_RA_ONLY 16
716
#define CONTEXT_RA_DONE 32
717
#define CONTEXT_RA_NAME 64
718
#define CONTEXT_RA_STATELESS 128
719
#define CONTEXT_DHCP 256
720
#define CONTEXT_DEPRECATE 512
721
#define CONTEXT_TEMPLATE 1024 /* create contexts using addresses */
722
#define CONTEXT_CONSTRUCTED 2048
723
#define CONTEXT_GC 4096
724
#define CONTEXT_RA 8192
725
#define CONTEXT_CONF_USED 16384
726
#define CONTEXT_USED 32768
735
#define CONTEXT_STATIC (1u<<0)
736
#define CONTEXT_NETMASK (1u<<1)
737
#define CONTEXT_BRDCAST (1u<<2)
738
#define CONTEXT_PROXY (1u<<3)
739
#define CONTEXT_RA_ONLY (1u<<4)
740
#define CONTEXT_RA_DONE (1u<<5)
741
#define CONTEXT_RA_NAME (1u<<6)
742
#define CONTEXT_RA_STATELESS (1u<<7)
743
#define CONTEXT_DHCP (1u<<8)
744
#define CONTEXT_DEPRECATE (1u<<9)
745
#define CONTEXT_TEMPLATE (1u<<10) /* create contexts using addresses */
746
#define CONTEXT_CONSTRUCTED (1u<<11)
747
#define CONTEXT_GC (1u<<12)
748
#define CONTEXT_RA (1u<<13)
749
#define CONTEXT_CONF_USED (1u<<14)
750
#define CONTEXT_USED (1u<<15)
751
#define CONTEXT_NOAUTH (1u<<16)
752
#define CONTEXT_OLD (1u<<17)
753
#define CONTEXT_V6 (1u<<18)
728
756
struct ping_result {
729
757
struct in_addr addr;
763
791
struct tftp_prefix *next;
795
struct all_addr local, server;
796
char *interface; /* Allowable interface for replies from server, and dest for IPv6 multicast */
797
int iface_index; /* working - interface in which requests arrived, for return */
798
struct dhcp_relay *current, *next;
767
801
extern struct daemon {
768
802
/* datastuctures representing the command-line and
789
825
struct name_list *secondary_forward_server;
790
826
int group_set, osport;
791
827
char *domain_suffix;
792
struct cond_domain *cond_domain;
828
struct cond_domain *cond_domain, *synth_domains;
794
830
char *lease_change_command;
795
struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers;
831
struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers, *tftp_interfaces;
796
832
struct bogus_addr *bogus_addr;
797
833
struct server *servers;
798
834
struct ipsets *ipsets;
804
840
unsigned long local_ttl, neg_ttl, max_ttl, max_cache_ttl, auth_ttl;
805
841
struct hostsfile *addn_hosts;
806
842
struct dhcp_context *dhcp, *dhcp6;
843
struct ra_interface *ra_interfaces;
807
844
struct dhcp_config *dhcp_conf;
808
845
struct dhcp_opt *dhcp_opts, *dhcp_match, *dhcp_opts6, *dhcp_match6;
809
846
struct dhcp_vendor *dhcp_vendors;
812
849
struct pxe_service *pxe_services;
813
850
struct tag_if *tag_if;
814
851
struct addr_list *override_relays;
852
struct dhcp_relay *relay4, *relay6;
817
855
int doing_ra, doing_dhcp6;
838
876
char *packet; /* packet buffer */
839
877
int packet_buff_sz; /* size of above */
840
878
char *namebuff; /* MAXDNAME size buffer */
841
unsigned int local_answer, queries_forwarded;
879
unsigned int local_answer, queries_forwarded, auth_answer;
842
880
struct frec *frec_list;
843
881
struct serverfd *sfds;
844
882
struct irec *interfaces;
906
944
void cache_unhash_dhcp(void);
907
945
void dump_cache(time_t now);
908
946
char *cache_get_name(struct crec *crecp);
947
char *cache_get_cname_target(struct crec *crecp);
909
948
struct crec *cache_enumerate(int init);
910
char *get_domain(struct in_addr addr);
912
char *get_domain6(struct in6_addr *addr);
914
949
#ifdef HAVE_DNSSEC
915
950
struct keydata *keydata_alloc(char *data, size_t len);
916
951
void keydata_free(struct keydata *blocks);
955
char *get_domain(struct in_addr addr);
957
char *get_domain6(struct in6_addr *addr);
959
int is_name_synthetic(int flags, char *name, struct all_addr *addr);
960
int is_rev_synth(int flag, struct all_addr *addr, char *name);
920
963
unsigned int extract_request(struct dns_header *header, size_t qlen,
921
964
char *name, unsigned short *typep);
936
979
size_t resize_packet(struct dns_header *header, size_t plen,
937
980
unsigned char *pheader, size_t hlen);
938
981
size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3);
982
size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source);
983
int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer);
939
984
int add_resource_record(struct dns_header *header, char *limit, int *truncp,
940
985
int nameoffset, unsigned char **pp, unsigned long ttl,
941
986
int *offset, unsigned short type, unsigned short class, char *format, ...);
943
988
int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
944
989
char *name, int isExtract, int extrabytes);
945
990
int in_arpa_name_2_addr(char *namein, struct all_addr *addrp);
991
int private_net(struct in_addr addr, int ban_localhost);
949
size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr);
995
size_t answer_auth(struct dns_header *header, char *limit, size_t qlen,
996
time_t now, union mysockaddr *peer_addr, int local_query);
997
int in_zone(struct auth_zone *zone, char *name, char **cut);
1020
1068
void pre_allocate_sfds(void);
1021
1069
int reload_servers(char *fname);
1022
1070
void check_servers(void);
1023
int enumerate_interfaces();
1071
int enumerate_interfaces(int reset);
1024
1072
void create_wildcard_listeners(void);
1025
1073
void create_bound_listeners(int die);
1074
void warn_bound_listeners(void);
1026
1075
int is_dad_listeners(void);
1027
1076
int iface_check(int family, struct all_addr *addr, char *name, int *auth_dns);
1028
1077
int loopback_exception(int fd, int family, struct all_addr *addr, char *name);
1078
int label_exception(int index, int family, struct all_addr *addr);
1029
1079
int fix_fd(int fd);
1030
1080
int tcp_interface(int fd, int af);
1031
struct in_addr get_ifaddr(char *intr);
1032
1081
#ifdef HAVE_IPV6
1033
1082
int set_ipv6pktinfo(int fd);
1049
1098
int address_allocate(struct dhcp_context *context,
1050
1099
struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
1051
1100
struct dhcp_netid *netids, time_t now);
1052
int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
1053
struct dhcp_config *find_config(struct dhcp_config *configs,
1054
struct dhcp_context *context,
1055
unsigned char *clid, int clid_len,
1056
unsigned char *hwaddr, int hw_len,
1057
int hw_type, char *hostname);
1058
1101
void dhcp_read_ethers(void);
1059
1102
struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr);
1060
1103
char *host_from_dns(struct in_addr addr);
1076
1119
u64 lease_find_max_addr6(struct dhcp_context *context);
1077
1120
void lease_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface);
1078
1121
void lease_update_slaac(time_t now);
1122
void lease_set_iaid(struct dhcp_lease *lease, int iaid);
1080
1124
void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
1081
1125
unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force);
1187
1231
struct in6_addr *taddr,
1188
1232
struct dhcp_netid *netids,
1189
1233
int plain_range);
1190
struct dhcp_config *find_config6(struct dhcp_config *configs,
1191
struct dhcp_context *context,
1192
unsigned char *duid, int duid_len,
1194
1234
struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net,
1195
1235
int prefix, u64 addr);
1196
1236
void make_duid(time_t now);
1197
1237
void dhcp_construct_contexts(time_t now);
1238
void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac,
1239
unsigned int *maclenp, unsigned int *mactypep);
1200
1242
/* rfc3315.c */
1201
1243
#ifdef HAVE_DHCP6
1202
1244
unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,
1203
struct in6_addr *fallback, size_t sz, int is_multicast, time_t now);
1245
struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now);
1246
void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id);
1248
unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface);
1206
1251
/* dhcp-common.c */
1216
1261
int match_bytes(struct dhcp_opt *o, unsigned char *p, int len);
1217
1262
void dhcp_update_configs(struct dhcp_config *configs);
1218
1263
void display_opts(void);
1219
u16 lookup_dhcp_opt(int prot, char *name);
1220
u16 lookup_dhcp_len(int prot, u16 val);
1264
int lookup_dhcp_opt(int prot, char *name);
1265
int lookup_dhcp_len(int prot, int val);
1221
1266
char *option_string(int prot, unsigned int opt, unsigned char *val,
1222
1267
int opt_len, char *buf, int buf_len);
1268
struct dhcp_config *find_config(struct dhcp_config *configs,
1269
struct dhcp_context *context,
1270
unsigned char *clid, int clid_len,
1271
unsigned char *hwaddr, int hw_len,
1272
int hw_type, char *hostname);
1273
int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
1223
1274
#ifdef HAVE_LINUX_NETWORK
1224
void bindtodevice(int fd);
1275
char *whichdevice(void);
1276
void bindtodevice(char *device, int fd);
1226
1278
# ifdef HAVE_DHCP6
1227
1279
void display_opts6(void);
1229
1281
void log_context(int family, struct dhcp_context *context);
1282
void log_relay(int family, struct dhcp_relay *relay);
1232
1285
/* outpacket.c */