~ubuntu-branches/ubuntu/utopic/dnsmasq/utopic

« back to all changes in this revision

Viewing changes to src/dnsmasq.h

  • Committer: Package Import Robot
  • Author(s): Simon Kelley
  • Date: 2013-08-04 14:53:22 UTC
  • mfrom: (0.5.6) (12.2.14 sid)
  • Revision ID: package-import@ubuntu.com-20130804145322-m7jo0uo06te27pxh
Tags: 2.67-1
 * New upstream.
 * Update resolvconf script. (closes: #720732)

Show diffs side-by-side

added added

removed removed

Lines of Context:
221
221
#define OPT_TFTP_LC        38
222
222
#define OPT_CLEVERBIND     39
223
223
#define OPT_TFTP           40
224
 
#define OPT_LAST           41
 
224
#define OPT_CLIENT_SUBNET  41
 
225
#define OPT_QUIET_DHCP     42
 
226
#define OPT_QUIET_DHCP6    43
 
227
#define OPT_QUIET_RA       44
 
228
#define OPT_LAST           45
225
229
 
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. */
307
311
struct interface_name {
308
312
  char *name; /* domain name */
309
313
  char *intr; /* interface name */
 
314
  struct addrlist {
 
315
    struct all_addr addr;
 
316
    struct addrlist *next;
 
317
  } *addr4;
 
318
#ifdef HAVE_IPV6
 
319
  struct addrlist *addr6;
 
320
#endif
310
321
  struct interface_name *next;
311
322
};
312
323
 
326
337
  union {
327
338
    struct all_addr addr;
328
339
    struct {
329
 
      struct crec *cache;
330
 
      int uid;
 
340
      union {
 
341
        struct crec *cache;
 
342
        struct interface_name *int_name;
 
343
      } target;
 
344
      int uid; /* -1 if union is interface-name */
331
345
    } cname;
332
346
    struct {
333
347
      struct keydata *keydata;
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
395
410
 
396
411
 
397
412
#define SERV_FROM_RESOLV       1  /* 1 for servers from resolv, 0 for command line. */
439
454
struct irec {
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;
443
458
  char *name; 
444
459
  struct irec *next;
445
460
};
478
493
 
479
494
#define FREC_NOREBIND           1
480
495
#define FREC_CHECKING_DISABLED  2
 
496
#define FREC_HAS_SUBNET         4
481
497
 
482
498
struct frec {
483
499
  union mysockaddr source;
530
546
#ifdef HAVE_BROKEN_RTC
531
547
  unsigned int length;
532
548
#endif
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;
 
557
  int iaid;
540
558
  struct slaac_address {
541
559
    struct in6_addr addr, local;
542
560
    time_t ping_time;
673
691
};
674
692
 
675
693
struct cond_domain {
676
 
  char *domain;
 
694
  char *domain, *prefix;
677
695
  struct in_addr start, end;
678
696
#ifdef HAVE_IPV6
679
697
  struct in6_addr start6, end6;
690
708
};
691
709
#endif
692
710
 
 
711
struct ra_interface {
 
712
  char *name;
 
713
  int interval, lifetime, prio;
 
714
  struct ra_interface *next;
 
715
};
 
716
 
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;
705
729
#endif
706
730
  int flags;
708
732
  struct dhcp_context *next, *current;
709
733
};
710
734
 
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)
 
754
 
727
755
 
728
756
struct ping_result {
729
757
  struct in_addr addr;
763
791
  struct tftp_prefix *next;
764
792
};
765
793
 
 
794
struct dhcp_relay {
 
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;
 
799
};
766
800
 
767
801
extern struct daemon {
768
802
  /* datastuctures representing the command-line and 
781
815
  struct auth_zone *auth_zones;
782
816
  struct interface_name *int_names;
783
817
  char *mxtarget;
 
818
  int addr4_netmask;
 
819
  int addr6_netmask;
784
820
  char *lease_file; 
785
821
  char *username, *groupname, *scriptuser;
786
822
  char *luascript;
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;
793
829
  char *runfile; 
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;
815
853
  int override;
816
854
  int enable_pxe;
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);
911
 
#ifdef HAVE_IPV6
912
 
char *get_domain6(struct in6_addr *addr);
913
 
#endif
914
949
#ifdef HAVE_DNSSEC
915
950
struct keydata *keydata_alloc(char *data, size_t len);
916
951
void keydata_free(struct keydata *blocks);
917
952
#endif
918
953
 
 
954
/* domain.c */
 
955
char *get_domain(struct in_addr addr);
 
956
#ifdef HAVE_IPV6
 
957
char *get_domain6(struct in6_addr *addr);
 
958
#endif
 
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);
 
961
 
919
962
/* rfc1035.c */
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);
946
992
 
947
993
/* auth.c */
948
994
#ifdef HAVE_AUTH
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);
950
998
#endif
951
999
 
952
1000
/* util.c */
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);
1034
1083
#endif
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);
1079
1123
#endif
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,
1193
 
                                 char *hostname);
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);
1198
1240
#endif
1199
 
 
 
1241
  
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);
 
1247
 
 
1248
unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface);
1204
1249
#endif
1205
1250
 
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);
1225
1277
#endif
1226
1278
#  ifdef HAVE_DHCP6
1227
1279
void display_opts6(void);
1228
1280
#  endif
1229
1281
void log_context(int family, struct dhcp_context *context);
 
1282
void log_relay(int family, struct dhcp_relay *relay);
1230
1283
#endif
1231
1284
 
1232
1285
/* outpacket.c */