summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/sys')
-rw-r--r--usr/src/uts/common/sys/dld.h3
-rw-r--r--usr/src/uts/common/sys/dlpi.h43
-rw-r--r--usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h21
-rw-r--r--usr/src/uts/common/sys/iphada.h144
-rw-r--r--usr/src/uts/common/sys/pattr.h7
-rw-r--r--usr/src/uts/common/sys/softmac_impl.h4
-rw-r--r--usr/src/uts/common/sys/squeue.h13
-rw-r--r--usr/src/uts/common/sys/squeue_impl.h6
-rw-r--r--usr/src/uts/common/sys/stream.h6
-rw-r--r--usr/src/uts/common/sys/tsol/tnet.h39
10 files changed, 38 insertions, 248 deletions
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h
index 9542a15a8e..ed80269fbc 100644
--- a/usr/src/uts/common/sys/dld.h
+++ b/usr/src/uts/common/sys/dld.h
@@ -395,7 +395,8 @@ typedef struct dld_capab_poll_s {
/*
* Currently supported flags for LSO.
*/
-#define DLD_LSO_TX_BASIC_TCP_IPV4 0x01 /* TCP LSO capability */
+#define DLD_LSO_BASIC_TCP_IPV4 0x01 /* TCP LSO over IPv4 capability */
+#define DLD_LSO_BASIC_TCP_IPV6 0x02 /* TCP LSO over IPv6 capability */
typedef struct dld_capab_lso_s {
uint_t lso_flags; /* capability flags */
diff --git a/usr/src/uts/common/sys/dlpi.h b/usr/src/uts/common/sys/dlpi.h
index 8b0681e2d8..6b3a5801d7 100644
--- a/usr/src/uts/common/sys/dlpi.h
+++ b/usr/src/uts/common/sys/dlpi.h
@@ -593,10 +593,6 @@ union DL_qos_types {
/* dl_data is dl_capab_id_t */
#define DL_CAPAB_HCKSUM 0x01 /* Checksum offload */
/* dl_data is dl_capab_hcksum_t */
-#define DL_CAPAB_IPSEC_AH 0x02 /* IPsec AH acceleration */
- /* dl_data is dl_capab_ipsec_t */
-#define DL_CAPAB_IPSEC_ESP 0x03 /* IPsec ESP acceleration */
- /* dl_data is dl_capab_ipsec_t */
#define DL_CAPAB_MDT 0x04 /* Multidata Transmit capability */
/* dl_data is dl_capab_mdt_t */
#define DL_CAPAB_ZEROCOPY 0x05 /* Zero-copy capability */
@@ -611,45 +607,8 @@ typedef struct {
} dl_capability_sub_t;
/*
- * Definitions and structures needed for DL_CONTROL_REQ and DL_CONTROL_ACK
- * primitives.
- * Extensible message to send down control information to the DLS provider.
- * The response is a DL_CONTROL_ACK or DL_ERROR_ACK.
- *
- * Different types of control operations will define different format for the
- * key and data fields. ADD requires key and data fields; if the <type, key>
- * matches an already existing entry a DL_ERROR_ACK will be returned. DELETE
- * requires a key field; if the <type, key> does not exist, a DL_ERROR_ACK
- * will be returned. FLUSH requires neither a key nor data; it
- * unconditionally removes all entries for the specified type. GET requires a
- * key field; the get operation returns the data for the <type, key>. If
- * <type, key> doesn't exist a DL_ERROR_ACK is returned. UPDATE requires key
- * and data fields; if <type, key> doesn't exist a DL_ERROR_ACK is returned.
- */
-
-/*
- * Control operations
- */
-#define DL_CO_ADD 0x01 /* Add new entry matching for <type,key> */
-#define DL_CO_DELETE 0x02 /* Delete the entry matching <type,key> */
-#define DL_CO_FLUSH 0x03 /* Purge all entries of <type> */
-#define DL_CO_GET 0x04 /* Get the data for the <type,key> */
-#define DL_CO_UPDATE 0x05 /* Update the data for <type,key> */
-#define DL_CO_SET 0x06 /* Add or update as appropriate */
-
-/*
- * Control types (dl_type field of dl_control_req_t and dl_control_ack_t)
- */
-#define DL_CT_IPSEC_AH 0x01 /* AH; key=spi,dest_addr; */
- /* data=keying material */
-#define DL_CT_IPSEC_ESP 0x02 /* ESP; key=spi,des_taddr; */
- /* data=keying material */
-
-/*
* Module ID token to be included in new sub-capability structures.
- * Existing sub-capabilities lacking an identification token, e.g. IPSEC
- * hardware acceleration, need to be encapsulated within the ID sub-
- * capability. Access to this structure must be done through
+ * Access to this structure must be done through
* dlcapab{set,check}qid().
*/
typedef struct {
diff --git a/usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h b/usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h
index c307ed7575..e0b7e1e1e7 100644
--- a/usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h
+++ b/usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h
@@ -31,24 +31,11 @@ extern "C" {
#endif
#include <sys/ib/mgt/ibcm/ibcm_impl.h>
-#include <sys/modhash.h>
#include <sys/ib/clients/ibd/ibd.h>
-#include <sys/strsun.h>
-#include <sys/socket.h>
-#include <sys/stat.h> /* for S_IFCHR */
#include <inet/ip2mac.h>
#include <inet/ip6.h>
-/*
- * IPoIB addr lookup completion function
- */
-typedef int (*ibcm_arp_pr_comp_func_t) (void *usr_arg, int status);
-
#define IBCM_ARP_MAX_IFNAME_LEN 24
-#define IBCM_ARP_XMIT_COUNT 6
-#define IBCM_ARP_XMIT_INTERVAL 1000 /* timeout in milliseconds */
-#define IBCM_ARP_TIMEOUT \
- ((IBCM_ARP_XMIT_COUNT + 1) * IBCM_ARP_XMIT_INTERVAL)
#define IBCM_H2N_GID(gid) \
{ \
@@ -68,9 +55,7 @@ typedef int (*ibcm_arp_pr_comp_func_t) (void *usr_arg, int status);
* Path record wait queue node definition
*/
typedef struct ibcm_arp_prwqn {
- ibcm_arp_pr_comp_func_t func; /* user callback function */
- void *arg; /* callback function arg */
- timeout_id_t timeout_id;
+ struct ibcm_arp_streams_s *ib_str;
uint8_t flags;
ibt_ip_addr_t usrc_addr; /* user supplied src address */
ibt_ip_addr_t dst_addr; /* user supplied dest address */
@@ -89,15 +74,11 @@ typedef struct ibcm_arp_prwqn {
typedef struct ibcm_arp_streams_s {
kmutex_t lock;
kcondvar_t cv;
- queue_t *arpqueue;
- vnode_t *arp_vp;
int status;
boolean_t done;
ibcm_arp_prwqn_t *wqnp;
} ibcm_arp_streams_t;
-/* GID to IP-Addr and Ip-Addr to GID look-up functions. */
-
#define IBCM_ARP_IBD_INSTANCES 4
typedef struct ibcm_arp_ip_s {
diff --git a/usr/src/uts/common/sys/iphada.h b/usr/src/uts/common/sys/iphada.h
deleted file mode 100644
index 9d1a6e28e8..0000000000
--- a/usr/src/uts/common/sys/iphada.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (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 2002-2003 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_IPHADA_H
-#define _SYS_IPHADA_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define DA_ICV_MAX_LEN 128 /* max ICV length [bytes] */
-
-/*
- * iphada.h header for IP Hardware Acceleration Data Attributes
- *
- * This is a contract private interface for use by the Sun
- * Hardware Accelerated Ethernet driver ONLY.
- */
-typedef struct da_ipsec {
- int da_type; /* M_CTL message ident */
- int da_flag;
- uint32_t da_icv_len; /* da_icv length in bytes */
- uchar_t da_icv[DA_ICV_MAX_LEN]; /* ICV for AH or ESP+auth */
-} da_ipsec_t;
-
-#define IPHADA_M_CTL 0xA1D53DE5u
-
-/*
- * IPSec algorithms capabilities (cip_data in dl_capab_ipsec_t)
- */
-typedef struct {
- t_uscalar_t alg_type;
- t_uscalar_t alg_prim; /* algorithm primitive */
- t_uscalar_t alg_thruput; /* approx throughput metric in Mb/s */
- t_uscalar_t alg_flag; /* flags */
- t_uscalar_t alg_minbits; /* minimum key len in bits */
- t_uscalar_t alg_maxbits; /* maximum key len in bits */
- t_uscalar_t alg_incrbits; /* key len increment in bits */
-} dl_capab_ipsec_alg_t;
-
-/*
- * IPSec sub-capability (follows dl_capability_sub_t)
- */
-typedef struct {
- t_uscalar_t cip_version; /* interface version */
- t_uscalar_t cip_nciphers; /* number ciphers supported */
- dl_capab_ipsec_alg_t cip_data[1]; /* data */
-} dl_capab_ipsec_t;
-
-/*
- * Algorithm types (alg_type field of dl_capab_ipsec_alg_t)
- */
-#define DL_CAPAB_IPSEC_ALG_AUTH 0x01 /* authentication alg. */
-#define DL_CAPAB_IPSEC_ALG_ENCR 0x02 /* encryption alg. */
-
-/* alg_prim ciphers */
-#define DL_CAPAB_IPSEC_ENCR_DES 0x02
-#define DL_CAPAB_IPSEC_ENCR_3DES 0x03
-#define DL_CAPAB_IPSEC_ENCR_BLOWFISH 0x07
-#define DL_CAPAB_IPSEC_ENCR_NULL 0x0b /* no encryption */
-#define DL_CAPAB_IPSEC_ENCR_AES 0x0c
-
-/* alg_prim authentications */
-#define DL_CAPAB_IPSEC_AUTH_NONE 0x00 /* no authentication */
-#define DL_CAPAB_IPSEC_AUTH_MD5HMAC 0x02
-#define DL_CAPAB_IPSEC_AUTH_SHA1HMAC 0x03
-
-/* alg_flag values */
-#define DL_CAPAB_ALG_ENABLE 0x01 /* enable this algorithm */
-
-/*
- * For DL_CT_IPSEC_AH and DL_CT_IPSEC_ESP, the optional dl_key data
- * that follows the dl_control_req_t or dl_control_ack_t will be the IPsec
- * SPI (Security Parameters Index) value and the destination address.
- * This is defined as being unique per protocol.
- */
-
-#define DL_CTL_IPSEC_ADDR_LEN 16 /* IP addr length in bytes */
-
-typedef struct dl_ct_ipsec_key {
- uint32_t dl_key_spi; /* Security Parameters Index value */
- uchar_t dl_key_dest_addr[DL_CTL_IPSEC_ADDR_LEN]; /* dest IP address */
- uint32_t dl_key_addr_family; /* family of dest IP address */
- /* (AF_INET or AF_INET6) */
-} dl_ct_ipsec_key_t;
-
-#define DL_CT_IPSEC_MAX_KEY_LEN 512 /* max key length in bytes */
-
-/*
- * Possible flags for sadb_sa_flags.
- */
-#define DL_CT_IPSEC_INBOUND 0x01 /* SA can be used for inbound pkts */
-#define DL_CT_IPSEC_OUTBOUND 0x02 /* SA can be used for outbound pkts */
-
-/*
- * minimal SADB entry content
- * fields are defined as per RFC 2367 and <net/pfkeyv2.h>
- * This defines the content and format of the dl_data portion of
- * the dl_control_req_t or dl_control_ack_t.
- */
-typedef struct dl_ct_ipsec {
- uint8_t sadb_sa_auth; /* Authentication algorithm */
- uint8_t sadb_sa_encrypt; /* Encryption algorithm */
- uint32_t sadb_sa_flags; /* SA flags. */
- uint16_t sadb_key_len_a; /* auth key length in bytes */
- uint16_t sadb_key_bits_a; /* auth key length in bits */
- uint16_t sadb_key_data_a[DL_CT_IPSEC_MAX_KEY_LEN]; /* key data */
- uint16_t sadb_key_len_e; /* encr key length in bytes */
- uint16_t sadb_key_bits_e; /* encr key length in bits */
- uint16_t sadb_key_data_e[DL_CT_IPSEC_MAX_KEY_LEN]; /* key data */
-} dl_ct_ipsec_t;
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_IPHADA_H */
diff --git a/usr/src/uts/common/sys/pattr.h b/usr/src/uts/common/sys/pattr.h
index cac046d675..f3b8397681 100644
--- a/usr/src/uts/common/sys/pattr.h
+++ b/usr/src/uts/common/sys/pattr.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_PATTR_H
#define _SYS_PATTR_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -92,6 +90,9 @@ typedef struct pattr_hcksum_s {
/* check the attached h/w computed */
/* checksum value to determine if */
/* checksum was bad */
+
+#define HCK_FLAGS (HCK_IPV4_HDRCKSUM | HCK_PARTIALCKSUM | \
+ HCK_FULLCKSUM | HCK_FULLCKSUM_OK)
/*
* Extended hardware offloading flags that also use hcksum_flags
*/
diff --git a/usr/src/uts/common/sys/softmac_impl.h b/usr/src/uts/common/sys/softmac_impl.h
index eb71063bc7..bd94d4982e 100644
--- a/usr/src/uts/common/sys/softmac_impl.h
+++ b/usr/src/uts/common/sys/softmac_impl.h
@@ -301,7 +301,9 @@ typedef struct softmac_upper_s {
uint32_t su_bound : 1, /* SL */
su_active : 1, /* SL */
- su_direct : 1; /* SL */
+ su_direct : 1, /* SL */
+ su_is_arp : 1,
+ su_pad_to_32:28;
/*
* Used for fastpath data path.
diff --git a/usr/src/uts/common/sys/squeue.h b/usr/src/uts/common/sys/squeue.h
index a2d808f647..de0f18bd4d 100644
--- a/usr/src/uts/common/sys/squeue.h
+++ b/usr/src/uts/common/sys/squeue.h
@@ -44,21 +44,19 @@ typedef struct squeue_s squeue_t;
(mp)->b_prev = (mblk_t *)(arg); \
}
-#define GET_SQUEUE(mp) ((conn_t *)((mp)->b_prev))->conn_sqp
-
#define SQ_FILL 0x0001
#define SQ_NODRAIN 0x0002
#define SQ_PROCESS 0x0004
-#define SQUEUE_ENTER(sqp, head, tail, cnt, flag, tag) { \
- sqp->sq_enter(sqp, head, tail, cnt, flag, tag); \
+#define SQUEUE_ENTER(sqp, head, tail, cnt, ira, flag, tag) { \
+ sqp->sq_enter(sqp, head, tail, cnt, ira, flag, tag); \
}
-#define SQUEUE_ENTER_ONE(sqp, mp, proc, arg, flag, tag) { \
+#define SQUEUE_ENTER_ONE(sqp, mp, proc, arg, ira, flag, tag) { \
ASSERT(mp->b_next == NULL); \
ASSERT(mp->b_prev == NULL); \
SET_SQUEUE(mp, proc, arg); \
- SQUEUE_ENTER(sqp, mp, mp, 1, flag, tag); \
+ SQUEUE_ENTER(sqp, mp, mp, 1, ira, flag, tag); \
}
/*
@@ -77,12 +75,13 @@ typedef enum {
SQPRIVATE_MAX
} sqprivate_t;
+struct ip_recv_attr_s;
extern void squeue_init(void);
extern squeue_t *squeue_create(clock_t, pri_t);
extern void squeue_bind(squeue_t *, processorid_t);
extern void squeue_unbind(squeue_t *);
extern void squeue_enter(squeue_t *, mblk_t *, mblk_t *,
- uint32_t, int, uint8_t);
+ uint32_t, struct ip_recv_attr_s *, int, uint8_t);
extern uintptr_t *squeue_getprivate(squeue_t *, sqprivate_t);
struct conn_s;
diff --git a/usr/src/uts/common/sys/squeue_impl.h b/usr/src/uts/common/sys/squeue_impl.h
index bd934cc0b3..22550886eb 100644
--- a/usr/src/uts/common/sys/squeue_impl.h
+++ b/usr/src/uts/common/sys/squeue_impl.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -79,9 +79,9 @@ typedef struct squeue_set_s {
processorid_t sqs_cpuid;
} squeue_set_t;
-typedef void (*sqproc_t)(void *, mblk_t *, void *);
+typedef void (*sqproc_t)(void *, mblk_t *, void *, struct ip_recv_attr_s *);
typedef void (*sq_enter_proc_t)(squeue_t *, mblk_t *, mblk_t *, uint32_t,
- int, uint8_t);
+ struct ip_recv_attr_s *, int, uint8_t);
typedef void (*sq_drain_proc_t)(squeue_t *, uint_t, hrtime_t);
extern void squeue_worker_wakeup(squeue_t *);
diff --git a/usr/src/uts/common/sys/stream.h b/usr/src/uts/common/sys/stream.h
index b9c96a8345..7a3b4e3448 100644
--- a/usr/src/uts/common/sys/stream.h
+++ b/usr/src/uts/common/sys/stream.h
@@ -404,9 +404,6 @@ typedef struct bcache {
#define STRUIO_IP 0x04 /* IP checksum stored in db_struioun */
#define STRUIO_ZC 0x08 /* mblk eligible for zero-copy */
#define STRUIO_ZCNOTIFY 0x10 /* notify stream head when mblk acked */
-#define STRUIO_EAGER 0x20 /* new eager; db_cksumstart has squeue to use */
-#define STRUIO_POLICY 0x40 /* new eager when IPsec is enabled */
-#define STRUIO_CONNECT 0x80 /* conn did a connect */
/*
* Message flags. These are interpreted by the stream head.
@@ -418,8 +415,7 @@ typedef struct bcache {
/* UNUSED 0x08 was MSGNOGET (can be recycled) */
#define MSGMARKNEXT 0x10 /* Private: first byte of next msg marked */
#define MSGNOTMARKNEXT 0x20 /* Private: ... not marked */
-#define MSGHASREF 0x40 /* Private: message has reference to owner */
-#define MSGWAITSYNC 0x80 /* Private: waiting for sync squeue enter */
+#define MSGWAITSYNC 0x40 /* Private: waiting for sync squeue enter */
/*
* Streams message types.
diff --git a/usr/src/uts/common/sys/tsol/tnet.h b/usr/src/uts/common/sys/tsol/tnet.h
index 221f4c775a..0da65ae5ca 100644
--- a/usr/src/uts/common/sys/tsol/tnet.h
+++ b/usr/src/uts/common/sys/tsol/tnet.h
@@ -46,35 +46,30 @@ extern "C" {
extern int tsol_tnrh_chk(tsol_tpent_t *, bslabel_t *, int);
extern tsol_tnrhc_t *find_rhc(const void *, uchar_t, boolean_t);
-extern int tsol_check_dest(const cred_t *, const void *, uchar_t, uint_t,
- cred_t **);
-extern int tsol_compute_label(const cred_t *, ipaddr_t, uchar_t *,
- ip_stack_t *);
-extern int tsol_compute_label_v6(const cred_t *, const in6_addr_t *, uchar_t *,
- ip_stack_t *);
-extern int tsol_check_label(const cred_t *, mblk_t **, uint_t,
- ip_stack_t *, pid_t);
-extern int tsol_check_label_v6(const cred_t *, mblk_t **, uint_t,
- ip_stack_t *, pid_t);
+extern int tsol_check_dest(const ts_label_t *, const void *, uchar_t,
+ uint_t, boolean_t, ts_label_t **);
+extern int tsol_compute_label_v4(const ts_label_t *, zoneid_t, ipaddr_t,
+ uchar_t *, ip_stack_t *);
+extern int tsol_compute_label_v6(const ts_label_t *, zoneid_t,
+ const in6_addr_t *, uchar_t *, ip_stack_t *);
+extern int tsol_check_label_v4(const ts_label_t *, zoneid_t, mblk_t **,
+ uint_t, boolean_t, ip_stack_t *, ts_label_t **);
+extern int tsol_check_label_v6(const ts_label_t *, zoneid_t, mblk_t **,
+ uint_t, boolean_t, ip_stack_t *, ts_label_t **);
extern int tsol_prepend_option(uchar_t *, ipha_t *, int);
extern int tsol_prepend_option_v6(uchar_t *, ip6_t *, int);
extern int tsol_remove_secopt(ipha_t *, int);
extern int tsol_remove_secopt_v6(ip6_t *, int);
-extern int tsol_update_sticky(ip6_pkt_t *, uint_t *, const uchar_t *);
-extern int tsol_update_options(uchar_t **, uint_t *, uint_t *,
- const uchar_t *);
-extern boolean_t tsol_option_set(uchar_t **, uint_t *, uint_t, const uchar_t *,
- uint_t);
extern tsol_ire_gw_secattr_t *ire_gw_secattr_alloc(int);
extern void ire_gw_secattr_free(tsol_ire_gw_secattr_t *);
-extern boolean_t tsol_can_reply_error(const mblk_t *);
+extern boolean_t tsol_can_reply_error(const mblk_t *, ip_recv_attr_t *);
extern boolean_t tsol_receive_local(const mblk_t *, const void *, uchar_t,
- boolean_t, const conn_t *);
-extern boolean_t tsol_can_accept_raw(mblk_t *, boolean_t);
-extern boolean_t tsol_get_pkt_label(mblk_t *, int);
-extern zoneid_t tsol_packet_to_zoneid(const mblk_t *);
+ ip_recv_attr_t *, const conn_t *);
+extern boolean_t tsol_can_accept_raw(mblk_t *, ip_recv_attr_t *, boolean_t);
+extern boolean_t tsol_get_pkt_label(mblk_t *, int, ip_recv_attr_t *);
+extern zoneid_t tsol_attr_to_zoneid(const ip_recv_attr_t *);
extern boolean_t tsol_get_option_v4(mblk_t *, tsol_ip_label_t *, uint8_t **);
extern boolean_t tsol_get_option_v6(mblk_t *, tsol_ip_label_t *, uint8_t **);
@@ -83,8 +78,8 @@ extern boolean_t tsol_find_secopt_v6(const uchar_t *, uint_t, uchar_t **,
extern int tsol_ire_match_gwattr(ire_t *, const ts_label_t *);
extern int tsol_rtsa_init(rt_msghdr_t *, tsol_rtsecattr_t *, caddr_t);
-extern int tsol_ire_init_gwattr(ire_t *, uchar_t, tsol_gc_t *, tsol_gcgrp_t *);
-extern mblk_t *tsol_ip_forward(ire_t *, mblk_t *);
+extern int tsol_ire_init_gwattr(ire_t *, uchar_t, tsol_gc_t *);
+extern mblk_t *tsol_ip_forward(ire_t *, mblk_t *, const ip_recv_attr_t *);
extern uint32_t tsol_pmtu_adjust(mblk_t *, uint32_t, int, int);
extern mlp_type_t tsol_mlp_addr_type(zoneid_t, uchar_t, const void *,