ncu.h revision f6da83d4178694e7113b71d1e452f15b296f73d8
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * CDDL HEADER START
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * The contents of this file are subject to the terms of the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * Common Development and Distribution License (the "License").
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * You may not use this file except in compliance with the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * or http://www.opensolaris.org/os/licensing.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * See the License for the specific language governing permissions
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * and limitations under the License.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * When distributing Covered Code, include this CDDL HEADER in each
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * If applicable, add the following below this CDDL HEADER, with the
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * fields enclosed by brackets "[]" replaced with your own identifying
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * information: Portions Copyright [yyyy] [name of copyright owner]
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * CDDL HEADER END
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskey * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern dladm_wlan_strength_t wireless_scan_level;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * NCPs are collections of NCUs. At the moment there is one NCP in the system
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * and its expected there will never be many. There is a lock on the NCP which
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * must be obtained to add or remove anything from the NCP.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * NCUs are also kept in a uu list for easy walking. Each NCU has a lock which
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * is used to protect manipulation of its contents. One of its members is a
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * reference count which is initialized to 1 when its placed on the NCP. As
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * references are passed around that should be manipulated as necessary
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * (helper functions YYY provided). It is removed from the NCP by
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * ncu_destroy() but the memory containing it is not returned to the free pool
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * until the reference count falls to 0.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * more complex system objects their relationship becomes more complex. That
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * is represented by the links within the NCUs. Reference counts should be
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * used to maintain the consistency of these links. Care should be used when
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey * walking more complex structures that might contain cycles.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Stores details of last/current WiFi scans */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char nwamd_wifi_scan_link[NWAM_MAX_NAME_LEN];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_wlan_t nwamd_wifi_scan_last[NWAMD_MAX_NUM_WLANS];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey nwam_wlan_t nwamd_wifi_scan_curr[NWAMD_MAX_NUM_WLANS];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytypedef struct nwamd_link {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char nwamd_link_wifi_keyname[DLADM_STRSIZE];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char nwamd_link_wifi_signal_strength[DLADM_STRSIZE];
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t nwamd_link_wifi_add_to_known_wlans;
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskey struct sockaddr_storage conf_addr; /* address configured for */
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskey struct sockaddr_storage conf_stateless_addr; /* this nwamd_if_address */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytypedef struct nwamd_if {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct sockaddr_in nwamd_if_ipv4_default_route;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct sockaddr_in6 nwamd_if_ipv6_default_route;
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeytypedef struct nwamd_ncu {
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey boolean_t ncu_enabled; /* whether NCU has been enabled or not */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#define WIRELESS_SCAN_REQUESTED_INTERVAL_MIN 10
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#define WIRELESS_SCAN_LEVEL_DEFAULT DLADM_WLAN_STRENGTH_WEAK
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskey * This dladm and ipadm handles are opened before interfaces are initialized
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskey * and closed only when nwamd shuts down.
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwamd_object_t nwamd_ncu_object_find(nwam_ncu_type_t, const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_log_ncus(void);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* WLAN functions */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_set_selected_connected(nwamd_ncu_t *, boolean_t, boolean_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_wlan_select(const char *, const char *, const char *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_wlan_set_key(const char *, const char *, const char *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_wlan_scan(const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_wlan_connect(const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern boolean_t nwamd_wlan_connected(nwamd_object_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_wlan_monitor_signal(const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_ncu_create_periodic_scan_event(nwamd_object_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern dladm_wlan_key_t *nwamd_wlan_get_key_named(const char *, uint32_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_set_key_name(const char *, const char *, char *, size_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* Link functions */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern link_state_t nwamd_get_link_state(const char *);
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskeyextern const char *nwamd_sockaddr_to_str(const struct sockaddr *, char *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_propogate_link_up_down_to_ip(const char *, boolean_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_set_unset_link_properties(nwamd_ncu_t *, boolean_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* DLPI event hooking */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_dlpi_add_link(nwamd_object_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_dlpi_delete_link(nwamd_object_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* IP functions */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern boolean_t nwamd_static_addresses_configured(nwamd_ncu_t *, sa_family_t);
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskeyextern void nwamd_plumb_interface(nwamd_ncu_t *, sa_family_t);
f6da83d4178694e7113b71d1e452f15b296f73d8Anurag S. Maskeyextern void nwamd_unplumb_interface(nwamd_ncu_t *, sa_family_t);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern boolean_t nwamd_dhcp_managing(int, nwamd_ncu_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_configure_interface_addresses(nwamd_ncu_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern char *nwamd_get_dhcpinfo_data(const char *, char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_dhcp_release(const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_add_default_routes(nwamd_ncu_t *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_add_route(struct sockaddr *, struct sockaddr *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey struct sockaddr *, const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey/* NCU value set/get functions */
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_set_ncu_uint(nwam_ncu_handle_t, uint64_t *, uint_t,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_set_ncu_string(nwam_ncu_handle_t, char **, uint_t,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_get_ncu_uint(nwam_ncu_handle_t, nwam_value_t *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern nwam_error_t nwamd_get_ncu_string(nwam_ncu_handle_t, nwam_value_t *,
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey char ***, uint_t *, const char *);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskeyextern void nwamd_walk_physical_configuration(void);
6ba597c56d749c61b4f783157f63196d7b2445f0Anurag S. Maskey#endif /* _NCU_H */