1 /*
2  * GNetwork Library: libgnetwork/gnetwork-interfaces.h
3  *
4  * Copyright (C) 2003 James M. Cape
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; version 2.1 of the
9  * License.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19  * USA
20  */
21 
22 #ifndef __GNETWORK_INTERFACES_H__
23 #define __GNETWORK_INTERFACES_H__
24 
25 #include <glib-object.h>
26 
27 G_BEGIN_DECLS
28 
29 
30 #define GNETWORK_TYPE_INTERFACE_INFO	(gnetwork_interface_info_get_type ())
31 #define GNETWORK_IS_INTERFACE_INFO(ptr)	(G_TYPE_CHECK_CLASS_TYPE (ptr, GNETWORK_TYPE_INTERFACE_INFO))
32 #define GNETWORK_INTERFACE_INFO(ptr)	(G_TYPE_CHECK_CLASS_CAST (ptr, GNETWORK_TYPE_INTERFACE_INFO, GNetworkInterfaceInfo))
33 
34 
35 typedef enum /* <flags,prefix=GNETWORK_INTERFACE> */
36 {
37   GNETWORK_INTERFACE_NONE		= 0,
38 
39   /* Status */
40   GNETWORK_INTERFACE_IS_UP		= 1 << 0,
41   GNETWORK_INTERFACE_IS_RUNNING		= 1 << 1,
42   GNETWORK_INTERFACE_IS_DEBUGGING	= 1 << 2,
43 
44   /* Special Types */
45   GNETWORK_INTERFACE_IS_LOOPBACK        = 1 << 3,
46   GNETWORK_INTERFACE_IS_POINT_TO_POINT  = 1 << 4,
47   GNETWORK_INTERFACE_IS_LOAD_MASTER	= 1 << 5,
48   GNETWORK_INTERFACE_IS_LOAD_SLAVE	= 1 << 6,
49 
50   /* Capabilities */
51   GNETWORK_INTERFACE_CAN_BROADCAST	= 1 << 7,
52   GNETWORK_INTERFACE_CAN_MULTICAST	= 1 << 8,
53   GNETWORK_INTERFACE_NO_TRAILERS	= 1 << 9,
54 
55   GNETWORK_INTERFACE_NO_ARP		= 1 << 10,
56   GNETWORK_INTERFACE_CAN_SET_MEDIA	= 1 << 11,
57   GNETWORK_INTERFACE_ALTERNATE_LINK	= 1 << 12,
58   GNETWORK_INTERFACE_AUTOSELECTED_MEDIA = 1 << 13,
59 
60   /* Modes */
61   GNETWORK_INTERFACE_RECV_ALL_PACKETS	= 1 << 14,
62   GNETWORK_INTERFACE_RECV_ALL_MULTICAST	= 1 << 15
63 }
64 GNetworkInterfaceFlags;
65 
66 typedef enum
67 {
68   GNETWORK_PROTOCOL_NONE    = 0,
69   GNETWORK_PROTOCOL_IPv4    = 1 << 0,
70   GNETWORK_PROTOCOL_IPv6    = 1 << 1,
71   GNETWORK_PROTOCOL_PACKET  = 1 << 2
72 }
73 GNetworkProtocols;
74 
75 
76 typedef struct _GNetworkInterfaceInfo GNetworkInterfaceInfo;
77 
78 
79 GType gnetwork_interface_info_get_type (void) G_GNUC_CONST;
80 
81 GNetworkInterfaceInfo *gnetwork_interface_get_info (const gchar * name);
82 GNetworkInterfaceInfo *gnetwork_interface_get_info_by_address (const gchar * address);
83 GSList *gnetwork_interface_get_all_interfaces (void);
84 
85 gchar *gnetwork_interface_info_get_name (const GNetworkInterfaceInfo * info);
86 GNetworkProtocols gnetwork_interface_info_get_protocols (const GNetworkInterfaceInfo * info);
87 gconstpointer gnetwork_interface_info_get_address (const GNetworkInterfaceInfo * info,
88 						   GNetworkProtocols protocol);
89 gconstpointer gnetwork_interface_info_get_broadcast_address (const GNetworkInterfaceInfo * info,
90 							     GNetworkProtocols protocol);
91 gconstpointer gnetwork_interface_info_get_destination (const GNetworkInterfaceInfo * info,
92 						       GNetworkProtocols protocol);
93 gconstpointer gnetwork_interface_info_get_netmask (const GNetworkInterfaceInfo * info,
94 						   GNetworkProtocols protocol);
95 G_CONST_RETURN GSList *gnetwork_interface_info_get_multicasts (const GNetworkInterfaceInfo * info,
96 							       GNetworkProtocols protocol);
97 GNetworkInterfaceFlags gnetwork_interface_info_get_flags (const GNetworkInterfaceInfo * info);
98 guint gnetwork_interface_info_get_index (const GNetworkInterfaceInfo * info);
99 
100 GNetworkInterfaceInfo *gnetwork_interface_info_ref (GNetworkInterfaceInfo * info);
101 void gnetwork_interface_info_unref (GNetworkInterfaceInfo * info);
102 gint gnetwork_interface_info_collate (const GNetworkInterfaceInfo * info1,
103 				      const GNetworkInterfaceInfo * info2);
104 
105 
106 G_END_DECLS
107 
108 #endif /* !__GNETWORK_INTERFACES_H__ */
109