Mercurial > illumos > onarm
diff usr/src/cmd/cmd-inet/lib/nwamd/structures.h @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/cmd/cmd-inet/lib/nwamd/structures.h Tue Jun 02 18:56:50 2009 +0900 @@ -0,0 +1,190 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _STRUCTURES_H +#define _STRUCTURES_H + +#pragma ident "@(#)structures.h 1.4 08/01/22 SMI" + +#include <net/if.h> +#include <libscf.h> +#include <libdlwlan.h> + +/* + * XXX More work on the state machine is needed. In the future, + * events will be more like EV_NEWADDR, identifying the actual + * event that we care about, rather than the source of the event + * that we originally implemented. For example, EV_ROUTING should + * be split into EV_LINK_UP and EV_LINK_DOWN. It's a bit of a mix + * right now. + */ +enum np_event_type { + EV_ROUTING, + EV_SYS, + EV_TIMER, + EV_SHUTDOWN, + EV_NEWADDR +}; + +enum interface_type { + IF_UNKNOWN, + IF_WIRED, + IF_WIRELESS, + IF_TUN +}; + +struct np_event { + enum np_event_type npe_type; + char *npe_name; + struct np_event *npe_next; +}; + +/* + * This structure is used to represent the current state of the system. We + * maintain these for IPv4 as proxies for links in the system. This is + * differentiated from the LLP which contains the intended configuration of + * the system. + * + * Currently these are stored on ifs_head with the wired interfaces sorted + * together and the wireless ones sorted together with ifs_wired and + * ifs_wireless pointed at these sublists. Access to these lists is not + * currently MT-safe. + * + * We explicitly do not maintain IPv6 interface structures. In the current + * state machine, IPv6 interfaces are completely dependent on their IPv4 + * counterparts. For example, we make a decision to bring up an interface + * based on routing socket messages read from an AF_INET socket; we will + * always bring up v4, and may additionally bring up v6. Also, when we + * start up, we find all interfaces in the system by doing 'ifconfig -a + * plumb', which will plumb v4 on all links; we always keep the v4 interface + * plumbed, taking it up and down depending on whether it's currently in use + * or not. v6 interfaces are not plumbed initially; when we decide a link + * should be active (and its llp tells us to do v6), we'll mark the (already + * existing) v4 interface up, and 'plumb up' the v6 interface. Conversely, + * when a link is no longer active, we 'down unplumb' the v6 interface, but + * only 'down' the v4 interface. + */ +struct interface { + char *if_name; + datalink_id_t if_linkid; + sa_family_t if_family; + uint64_t if_flags; + uint32_t if_lflags; + enum interface_type if_type; + uint32_t if_timer_expire; + struct sockaddr *if_ipaddr; + struct interface *if_next; +}; + +/* + * interface local flag values + */ +/* + * IF_DHCPFAILED: indicates that we timed out a dhcp request. Will be + * cleared if the request eventually succeeds, or if the IFF_RUNNING flag + * is toggled off/on (i.e. the cable is unplugged/plugged) + */ +#define IF_DHCPFAILED 0x01 +/* + * IF_DHCPSTARTED: much like IFF_DHCPRUNNING; but means specifically that + * we have inititated dhcp on this interface. Used to prevent overlapping + * invocations of dhcp. + */ +#define IF_DHCPSTARTED 0x02 +/* + * IF_DHCPACQUIRED: indicates that dhcp successfully acquired a lease. + */ +#define IF_DHCPACQUIRED 0x04 + +#define IF_DHCPFLAGS (IF_DHCPFAILED | IF_DHCPSTARTED | IF_DHCPACQUIRED) + +/* + * visited_wlans are stored on visited_wlan_list of type visisted_wlans_list. + * Access is protected by wifi_mutex. + */ +struct visited_wlans { + struct wireless_lan *wifi_net; + struct visited_wlans *next; +}; + +struct visited_wlans_list { + struct visited_wlans *head; + int total; +}; + +typedef enum { + IPV4SRC_STATIC, + IPV4SRC_DHCP +} ipv4src_t; + +/* + * This structure contains the intended configuration of the system as + * differentiated from the actual IPv4 configuration of the system represented + * by the interface structures. + * + * llp structures are held on the list llp_head. Access to this list is + * protected by llp_lock. + */ +typedef struct llp { + struct llp *llp_next; + char llp_lname[LIFNAMSIZ]; + int llp_pri; /* lower number => higher priority */ + enum interface_type llp_type; + ipv4src_t llp_ipv4src; + char *llp_ipv4addrstr; /* if ipsrc is STATIC */ + char *llp_ipv6addrstr; /* if the user provided a static addr */ + boolean_t llp_ipv6onlink; /* true if we plumb up a v6 interface */ +} llp_t; + +/* + * These entries are user allocated and should be managed by whomever + * originates the structure. + */ +struct wireless_lan { + char *essid; + char *bssid; + char *signal_strength; + char *raw_key; + dladm_wlan_key_t *cooked_key; + dladm_wlan_secmode_t sec_mode; + char *wl_if_name; +}; + +/* + * A holder for all the resources needed to get a property value + * using libscf. + */ +typedef struct scf_resources { + scf_handle_t *sr_handle; + scf_instance_t *sr_inst; + scf_snapshot_t *sr_snap; + scf_propertygroup_t *sr_pg; + scf_property_t *sr_prop; + scf_value_t *sr_val; +} scf_resources_t; + + +#endif /* _STRUCTURES_H */