]> git.meshlink.io Git - catta/blob - avahi-core/iface.h
hide some files
[catta] / avahi-core / iface.h
1 #ifndef fooifacehfoo
2 #define fooifacehfoo
3
4 /* $Id$ */
5
6 /***
7   This file is part of avahi.
8  
9   avahi is free software; you can redistribute it and/or modify it
10   under the terms of the GNU Lesser General Public License as
11   published by the Free Software Foundation; either version 2.1 of the
12   License, or (at your option) any later version.
13  
14   avahi is distributed in the hope that it will be useful, but WITHOUT
15   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
17   Public License for more details.
18  
19   You should have received a copy of the GNU Lesser General Public
20   License along with avahi; if not, write to the Free Software
21   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22   USA.
23 ***/
24
25 typedef struct AvahiInterfaceMonitor AvahiInterfaceMonitor;
26 typedef struct AvahiInterfaceAddress AvahiInterfaceAddress;
27 typedef struct AvahiInterface AvahiInterface;
28 typedef struct AvahiHwInterface AvahiHwInterface;
29
30 #include <avahi-common/llist.h>
31 #include <avahi-common/address.h>
32
33 #include "server.h"
34 #include "netlink.h"
35 #include "cache.h"
36 #include "response-sched.h"
37 #include "query-sched.h"
38 #include "probe-sched.h"
39 #include "dns.h"
40 #include "announce.h"
41
42 #define AVAHI_MAX_MAC_ADDRESS 32
43
44 struct AvahiInterfaceMonitor {
45     AvahiServer *server;
46     AvahiNetlink *netlink;
47     AvahiHashmap *hashmap;
48
49     AVAHI_LLIST_HEAD(AvahiInterface, interfaces);
50     AVAHI_LLIST_HEAD(AvahiHwInterface, hw_interfaces);
51     
52     unsigned query_addr_seq, query_link_seq;
53     
54     enum {
55         LIST_IFACE,
56         LIST_ADDR,
57         LIST_DONE
58     } list;
59 };
60
61 struct AvahiHwInterface {
62     AVAHI_LLIST_FIELDS(AvahiHwInterface, hardware);
63     AvahiInterfaceMonitor *monitor;
64
65     char *name;
66     AvahiIfIndex index;
67     unsigned flags;
68     unsigned mtu;
69
70     uint8_t mac_address[AVAHI_MAX_MAC_ADDRESS];
71     size_t mac_address_size;
72
73     AvahiSEntryGroup *entry_group;
74
75     AVAHI_LLIST_HEAD(AvahiInterface, interfaces);
76 };
77
78 struct AvahiInterface {
79     AVAHI_LLIST_FIELDS(AvahiInterface, interface);
80     AVAHI_LLIST_FIELDS(AvahiInterface, by_hardware);
81     AvahiInterfaceMonitor *monitor;
82     
83     AvahiHwInterface *hardware;
84     AvahiProtocol protocol;
85     int announcing;
86
87     AvahiCache *cache;
88     AvahiQueryScheduler *query_scheduler;
89     AvahiResponseScheduler * response_scheduler;
90     AvahiProbeScheduler *probe_scheduler;
91
92     AVAHI_LLIST_HEAD(AvahiInterfaceAddress, addresses);
93     AVAHI_LLIST_HEAD(AvahiAnnouncement, announcements);
94 };
95
96 struct AvahiInterfaceAddress {
97     AVAHI_LLIST_FIELDS(AvahiInterfaceAddress, address);
98     AvahiInterfaceMonitor *monitor;
99     
100     unsigned char flags;
101     unsigned char scope;
102     unsigned char prefix_len;
103     AvahiAddress address;
104     
105     AvahiSEntryGroup *entry_group;
106     AvahiInterface *interface;
107 };
108
109 AvahiInterfaceMonitor *avahi_interface_monitor_new(AvahiServer *server);
110 void avahi_interface_monitor_free(AvahiInterfaceMonitor *m);
111
112 void avahi_interface_monitor_sync(AvahiInterfaceMonitor *m);
113
114 AvahiInterface* avahi_interface_monitor_get_interface(AvahiInterfaceMonitor *m, AvahiIfIndex idx, AvahiProtocol protocol);
115 AvahiHwInterface* avahi_interface_monitor_get_hw_interface(AvahiInterfaceMonitor *m, int idx);
116
117 void avahi_interface_send_packet(AvahiInterface *i, AvahiDnsPacket *p);
118 void avahi_interface_send_packet_unicast(AvahiInterface *i, AvahiDnsPacket *p, const AvahiAddress *a, uint16_t port);
119
120 int avahi_interface_post_query(AvahiInterface *i, AvahiKey *k, int immediately);
121 int avahi_interface_post_response(AvahiInterface *i, AvahiRecord *record, int flush_cache, const AvahiAddress *querier, int immediately);
122 int avahi_interface_post_probe(AvahiInterface *i, AvahiRecord *p, int immediately);
123
124 int avahi_dump_caches(AvahiInterfaceMonitor *m, AvahiDumpCallback callback, void* userdata);
125
126 int avahi_interface_relevant(AvahiInterface *i);
127 int avahi_interface_address_relevant(AvahiInterfaceAddress *a);
128
129 int avahi_interface_match(AvahiInterface *i, AvahiIfIndex idx, AvahiProtocol protocol);
130
131 typedef void (*AvahiInterfaceMonitorWalkCallback)(AvahiInterfaceMonitor *m, AvahiInterface *i, void* userdata);
132     
133 void avahi_interface_monitor_walk(AvahiInterfaceMonitor *m, AvahiIfIndex idx, AvahiProtocol protocol, AvahiInterfaceMonitorWalkCallback callback, void* userdata);
134
135 void avahi_update_host_rrs(AvahiInterfaceMonitor *m, int remove_rrs);
136
137 int avahi_address_is_local(AvahiInterfaceMonitor *m, const AvahiAddress *a);
138
139 int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a);
140
141 int avahi_interface_has_address(AvahiInterfaceMonitor *m, AvahiIfIndex iface, const AvahiAddress *a);
142
143 #endif