ip_netinfo.c revision 10e6dadfe63181edabc58c8f42e3c56a1cd9ec95
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * CDDL HEADER START
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * The contents of this file are subject to the terms of the
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Common Development and Distribution License (the "License").
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * You may not use this file except in compliance with the License.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * See the License for the specific language governing permissions
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * and limitations under the License.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * When distributing Covered Code, include this CDDL HEADER in each
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * If applicable, add the following below this CDDL HEADER, with the
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * fields enclosed by brackets "[]" replaced with your own identifying
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * information: Portions Copyright [yyyy] [name of copyright owner]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * CDDL HEADER END
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Use is subject to license terms.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#pragma ident "%Z%%M% %I% %E% SMI"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * IPv4 netinfo entry point declarations.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getifname(phy_if_t, char *, const size_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getmtu(phy_if_t, lif_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getlifaddr(phy_if_t, lif_if_t, size_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ip_phygetnext(phy_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ip_phylookup(const char *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic lif_if_t ip_lifgetnext(phy_if_t, lif_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_inject(inject_t, net_inject_t *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ip_routeto(struct sockaddr *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ipv6_getifname(phy_if_t, char *, const size_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ipv6_getmtu(phy_if_t, lif_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ipv6_getlifaddr(phy_if_t, lif_if_t, size_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ipv6_phygetnext(phy_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ipv6_phylookup(const char *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic lif_if_t ipv6_lifgetnext(phy_if_t, lif_if_t, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ipv6_inject(inject_t, net_inject_t *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ipv6_routeto(struct sockaddr *, netstack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin/* Netinfo private functions */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getmtu_impl(phy_if_t, lif_if_t, boolean_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ip_phylookup_impl(const char *, boolean_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic lif_if_t ip_lifgetnext_impl(phy_if_t, lif_if_t, boolean_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_inject_impl(inject_t, net_inject_t *, boolean_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getifaddr_type(sa_family_t, ipif_t *, lif_if_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic phy_if_t ip_routeto_impl(struct sockaddr *, ip_stack_t *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic int ip_getlifaddr_impl(sa_family_t, phy_if_t, lif_if_t,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic void ip_ni_queue_in_func(void *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic void ip_ni_queue_out_func(void *);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstatic void ip_ni_queue_func_impl(injection_t *, boolean_t);
"net_register_event failed for ipv4/physical_in");
"net_register_event failed for ipv4/physical_out");
"net_register_event failed for ipv4/forwarding");
"net_register_event failed for ipv4/loopback_in");
"net_register_event failed for ipv4/loopback_out");
"net_register_event failed for ipv4/nic_events");
"net_register_event failed for ipv6/physical_in");
"net_register_event failed for ipv6/physical_out");
"net_register_event failed for ipv6/forwarding");
"net_register_event failed for ipv6/loopback_in");
"net_register_event failed for ipv6/loopback_out");
"net_register_event failed for ipv6/nic_events");
char *name;
int mtu;
if (mtu == 0) {
return (mtu);
static phy_if_t
static phy_if_t
static phy_if_t
static phy_if_t
static phy_if_t
return (phy);
static lif_if_t
static lif_if_t
static lif_if_t
if (ifdata != 0) {
oldidx = 0;
if (nextok) {
void (* func)(void *);
switch (style) {
case NI_QUEUE_IN:
case NI_QUEUE_OUT:
case NI_DIRECT_OUT:
if (!isv6) {
case EINPROGRESS:
case ECOMM :
case ENONET :
ipst);
if (tq) {
static phy_if_t
static phy_if_t
static phy_if_t
ipst);
ipst);
return (phy_if);
int ret = 0;
return (ret);
unsigned char *wptr;
int hlen;
int ret;
if (dohwcksum &&
ret = 0;
return (ret);
type[i]));
type[i]));
void *src_addr;
int mem_size;
switch (type) {
case NA_ADDRESS:
case NA_PEER:
case NA_BROADCAST:
case NA_NETMASK:
switch (type) {
case NA_ADDRESS:
case NA_PEER:
case NA_BROADCAST:
case NA_NETMASK:
if (out == 0) {
IP_WPUT);
IP_WPUT);
ill_t *
return (ill);
return (NULL);
ill_t *
return (ill);
return (NULL);