/* * iface.h - Network interface configuration API * * Copyright (C) 2006, 2007, 2008 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Author(s): David Cantrell */ #ifndef ISYSIFACE_H #define ISYSIFACE_H #include #include #include #include #include /* Enumerated types used in iface.c as well as loader's network code */ enum { IPUNUSED, IPV4, IPV6 }; enum { IPV4_UNUSED_METHOD, IPV4_DHCP_METHOD, IPV4_MANUAL_METHOD, IPV4_IBFT_METHOD, IPV4_IBFT_DHCP_METHOD }; enum { IPV6_UNUSED_METHOD, IPV6_AUTO_METHOD, IPV6_DHCP_METHOD, IPV6_MANUAL_METHOD }; #define IPV4_FIRST_METHOD IPV4_DHCP_METHOD #define IPV4_LAST_METHOD IPV4_MANUAL_METHOD #define IPV6_FIRST_METHOD IPV6_AUTO_METHOD #define IPV6_LAST_METHOD IPV6_MANUAL_METHOD /* Flags for the iface_t (do we need these?) */ #define IFACE_FLAGS_NO_WRITE_RESOLV_CONF (((uint64_t) 1) << 0) #define IFACE_NO_WRITE_RESOLV_CONF(a) ((a) & IFACE_FLAGS_NO_WRITE_RESOLV_CONF) /* Macros for starting NetworkManager */ #define NETWORKMANAGER "/usr/sbin/NetworkManager" /* Per-interface configuration information */ typedef struct _iface_t { /* device name (e.g., eth0) */ char device[IF_NAMESIZE]; /* MAC address as xx:xx:xx:xx:xx:xx */ char *macaddr; /* IPv4 (store addresses in in_addr format, use inet_pton() to display) */ struct in_addr ipaddr; struct in_addr netmask; struct in_addr broadcast; /* IPv6 (store addresses in in6_addr format, prefix is just an int) */ struct in6_addr ip6addr; int ip6prefix; /* Gateway settings */ struct in_addr gateway; struct in6_addr gateway6; /* BOOTP (these can be IPv4 or IPv6, store human-readable version as str) */ char *nextserver; char *bootfile; /* DNS (these can be IPv4 or IPv6, store human-readable version as str) */ char *dns[MAXNS]; int numdns; char *hostname; char *domain; char *search; /* Misc DHCP settings */ int dhcptimeout; char *vendorclass; /* Wireless settings */ char *ssid; char *wepkey; /* s390 specifics */ int mtu; char *subchannels; char *portname; char *peerid; char *nettype; char *ctcprot; char *layer2; char *portno; /* flags */ uint64_t flags; int ipv4method; int ipv6method; int isiBFT; } iface_t; /* Function prototypes */ /* * Given an interface name (e.g., eth0) and address family (e.g., AF_INET), * return the IP address in human readable format (i.e., the output from * inet_ntop()). Return NULL for no match or error. */ char *iface_ip2str(char *, int); /* * Given an interface name (e.g., eth0), return the MAC address in human * readable format (e.g., 00:11:52:12:D9:A0). Return NULL for no match. */ char *iface_mac2str(char *); /* Given an interface's MAC address, return the name (e.g., eth0) in human * readable format. Return NULL for no match */ char *iface_mac2device(char *); /* * Convert an IPv4 CIDR prefix to a dotted-quad netmask. Return NULL on * failure. */ struct in_addr *iface_prefix2netmask(int); /* * Initialize a new iface_t structure to default values. */ void iface_init_iface_t(iface_t *); /* * Given a pointer to a struct in_addr, return 1 if it contains a valid * address, 0 otherwise. */ int iface_have_in_addr(struct in_addr *addr); /* * Given a pointer to a struct in6_addr, return 1 if it contains a valid * address, 0 otherwise. */ int iface_have_in6_addr(struct in6_addr *addr6); /* * Checks if NetworkManager has an active connection. */ gboolean is_nm_connected(void); /* * Start NetworkManager */ int iface_start_NetworkManager(void); /* * Set Maximum Transfer Unit (MTU) on specified interface */ int iface_set_interface_mtu(char *ifname, int mtu); #endif /* ISYSIFACE_H */