]> git.meshlink.io Git - catta/blob - libavahi-core/iface.h
cab4949f166e1d9de1b76961103549e25a5c6ae2
[catta] / libavahi-core / iface.h
1 #ifndef fooifacehfoo
2 #define fooifacehfoo
3
4 #include <glib.h>
5
6 typedef struct _AvahiInterfaceMonitor AvahiInterfaceMonitor;
7 typedef struct _AvahiInterfaceAddress AvahiInterfaceAddress;
8 typedef struct _AvahiInterface AvahiInterface;
9 typedef struct _AvahiHwInterface AvahiHwInterface;
10
11 #include "address.h"
12 #include "server.h"
13 #include "netlink.h"
14 #include "cache.h"
15 #include "llist.h"
16 #include "psched.h"
17 #include "dns.h"
18 #include "announce.h"
19
20 struct _AvahiInterfaceMonitor {
21     AvahiServer *server;
22     AvahiNetlink *netlink;
23     GHashTable *hash_table;
24
25     AVAHI_LLIST_HEAD(AvahiInterface, interfaces);
26     AVAHI_LLIST_HEAD(AvahiHwInterface, hw_interfaces);
27     
28     guint query_addr_seq, query_link_seq;
29     
30     enum {
31         LIST_IFACE,
32         LIST_ADDR,
33         LIST_DONE
34     } list;
35 };
36
37 struct _AvahiHwInterface {
38     AVAHI_LLIST_FIELDS(AvahiHwInterface, hardware);
39     AvahiInterfaceMonitor *monitor;
40
41     gchar *name;
42     gint index;
43     guint flags;
44     guint mtu;
45
46     AVAHI_LLIST_HEAD(AvahiInterface, interfaces);
47 };
48
49 struct _AvahiInterface {
50     AVAHI_LLIST_FIELDS(AvahiInterface, interface);
51     AVAHI_LLIST_FIELDS(AvahiInterface, by_hardware);
52     AvahiInterfaceMonitor *monitor;
53     
54     AvahiHwInterface *hardware;
55     guchar protocol;
56     gboolean announcing;
57
58     AvahiCache *cache;
59     AvahiPacketScheduler *scheduler;
60
61     AVAHI_LLIST_HEAD(AvahiInterfaceAddress, addresses);
62     AVAHI_LLIST_HEAD(AvahiAnnouncement, announcements);
63 };
64
65 struct _AvahiInterfaceAddress {
66     AVAHI_LLIST_FIELDS(AvahiInterfaceAddress, address);
67     AvahiInterfaceMonitor *monitor;
68     
69     guchar flags;
70     guchar scope;
71     AvahiAddress address;
72     
73     AvahiEntryGroup *entry_group;
74     AvahiInterface *interface;
75 };
76
77 AvahiInterfaceMonitor *avahi_interface_monitor_new(AvahiServer *server);
78 void avahi_interface_monitor_free(AvahiInterfaceMonitor *m);
79
80 void avahi_interface_monitor_sync(AvahiInterfaceMonitor *m);
81
82 AvahiInterface* avahi_interface_monitor_get_interface(AvahiInterfaceMonitor *m, gint index, guchar protocol);
83 AvahiHwInterface* avahi_interface_monitor_get_hw_interface(AvahiInterfaceMonitor *m, gint index);
84
85 void avahi_interface_send_packet(AvahiInterface *i, AvahiDnsPacket *p);
86
87 void avahi_interface_post_query(AvahiInterface *i, AvahiKey *k, gboolean immediately);
88 void avahi_interface_post_probe(AvahiInterface *i, AvahiRecord *p, gboolean immediately);
89 void avahi_interface_post_response(AvahiInterface *i, const AvahiAddress *a, AvahiRecord *record, gboolean flush_cache, gboolean immediately);
90
91 void avahi_dump_caches(AvahiInterfaceMonitor *m, FILE *f);
92
93 gboolean avahi_interface_relevant(AvahiInterface *i);
94 gboolean avahi_interface_address_relevant(AvahiInterfaceAddress *a);
95
96 gboolean avahi_interface_match(AvahiInterface *i, gint index, guchar protocol);
97
98 typedef void (*AvahiInterfaceMonitorWalkCallback)(AvahiInterfaceMonitor *m, AvahiInterface *i, gpointer userdata);
99     
100 void avahi_interface_monitor_walk(AvahiInterfaceMonitor *m, gint index, guchar protocol, AvahiInterfaceMonitorWalkCallback callback, gpointer userdata);
101
102 #endif