usr/src/uts/common/sys/ib/mgt/ibcm/ibcm_arp.h
author hiremath
Sat, 22 Dec 2007 18:19:42 -0800
changeset 5752 ee58901cb99b
parent 4703 bb31c50bb3ab
child 8485 633e5b5eb268
permissions -rw-r--r--
6607946 IBTF should accept higher packet lifetime 6644586 ibcm_arp_get_ibaddr() can hang 6644848 Annoucement of new HCA arrival is to made to IBCM prior to regular clients
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4703
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     1
/*
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     2
 * CDDL HEADER START
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     3
 *
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     7
 *
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    11
 * and limitations under the License.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    12
 *
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    18
 *
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    19
 * CDDL HEADER END
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    20
 */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    21
/*
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    23
 * Use is subject to license terms.
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    24
 */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    25
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    26
#ifndef _SYS_IB_MGT_IBCM_IBCM_ARP_H
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    27
#define	_SYS_IB_MGT_IBCM_IBCM_ARP_H
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    28
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    30
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    31
#ifdef	__cplusplus
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    32
extern "C" {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    33
#endif
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    34
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    35
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    36
#include <sys/ib/mgt/ibcm/ibcm_impl.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    37
#include <sys/modhash.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    38
#include <sys/ib/clients/ibd/ibd.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    39
#include <sys/strsun.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    40
#include <sys/strsubr.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    41
#include <sys/socket.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    42
#include <sys/stat.h>	/* for S_IFCHR */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    43
#include <inet/common.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    44
#include <inet/ip.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    45
#include <inet/ip_if.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    46
#include <inet/ip_ire.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    47
#include <inet/ip_rts.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    48
#include <sys/dlpi.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    49
#include <net/route.h>
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    50
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    51
/*
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    52
 * IPoIB addr lookup completion function
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    53
 */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    54
typedef int (*ibcm_arp_pr_comp_func_t) (void *usr_arg, int status);
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    55
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    56
#define	IBCM_ARP_MAX_IFNAME_LEN		24
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    57
#define	IBCM_ARP_RTM_LEN		0x158
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    58
#define	IBCM_ARP_XMIT_COUNT		6
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    59
#define	IBCM_ARP_XMIT_INTERVAL		1000	/* timeout in milliseconds */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    60
#define	IBCM_ARP_TIMEOUT \
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    61
		((IBCM_ARP_XMIT_COUNT + 1) * IBCM_ARP_XMIT_INTERVAL)
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    62
#define	IBCM_ARP_IP6_TIMEOUT		1000000	/* timeout in microseconds */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    63
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    64
enum {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    65
	IBCM_ARP_PR_RT_PENDING = 0x01,
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    66
	IBCM_ARP_PR_ARP_PENDING = 0x02
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    67
};
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    68
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    69
/*
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    70
 * Path record wait queue node definition
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    71
 */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    72
typedef struct ibcm_arp_prwqn {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    73
	ibcm_arp_pr_comp_func_t	func;	/* user callback function */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    74
	void			*arg;	/* callback function arg */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    75
	timeout_id_t		timeout_id;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    76
	uint8_t			flags;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    77
	ibt_ip_addr_t		usrc_addr;	/* user supplied src address */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    78
	ibt_ip_addr_t		dst_addr;	/* user supplied dest address */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    79
	ibt_ip_addr_t		src_addr;	/* rts's view of src address */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    80
	char			ifname[IBCM_ARP_MAX_IFNAME_LEN];
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    81
	int			ibd_instance;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    82
	uint16_t		ifproto;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    83
	ipoib_mac_t		src_mac;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    84
	ipoib_mac_t		dst_mac;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    85
	uint32_t		localroute;		/* user option */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    86
	uint32_t		bound_dev_if;		/* user option */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    87
	ib_gid_t		sgid;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    88
	ib_gid_t		dgid;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    89
	uint8_t			hw_port;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    90
	uint16_t		pkey;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    91
	int			retries;	/* no. of ND retries for ipv6 */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    92
} ibcm_arp_prwqn_t;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    93
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    94
typedef struct ibcm_arp_streams_s {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    95
	kmutex_t		lock;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    96
	kcondvar_t		cv;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    97
	queue_t			*arpqueue;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    98
	vnode_t			*arp_vp;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
    99
	int			status;
5752
ee58901cb99b 6607946 IBTF should accept higher packet lifetime
hiremath
parents: 4703
diff changeset
   100
	boolean_t		done;
4703
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   101
	ibcm_arp_prwqn_t	*wqnp;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   102
} ibcm_arp_streams_t;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   103
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   104
/* GID to IP-Addr and Ip-Addr to GID look-up functions. */
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   105
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   106
#define	IBCM_ARP_IBD_NAME		"ibd"
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   107
#define	IBCM_ARP_IBD_INSTANCES		4
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   108
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   109
typedef struct ibcm_arp_ip_s {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   110
	uint8_t		ip_inst;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   111
	ib_pkey_t	ip_pkey;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   112
	ib_guid_t	ip_hca_guid;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   113
	ib_gid_t	ip_port_gid;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   114
	sa_family_t	ip_inet_family;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   115
	union {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   116
		struct sockaddr_in	ip_sockaddr;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   117
		struct sockaddr_in6	ip_sockaddr6;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   118
	} ip_sin;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   119
#define	ip_cm_sin		ip_sin.ip_sockaddr
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   120
#define	ip_cm_sin6		ip_sin.ip_sockaddr6
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   121
} ibcm_arp_ip_t;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   122
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   123
typedef struct ibcm_arp_ibd_insts_s {
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   124
	uint8_t		ibcm_arp_ibd_alloc;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   125
	uint8_t		ibcm_arp_ibd_cnt;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   126
	ibcm_arp_ip_t	*ibcm_arp_ip;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   127
} ibcm_arp_ibd_insts_t;
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   128
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   129
ibt_status_t ibcm_arp_get_ibaddr(ipaddr_t srcip, ipaddr_t destip,
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   130
    ib_gid_t *sgid, ib_gid_t *dgid);
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   131
ibt_status_t ibcm_arp_get_srcip_plist(ibt_ip_path_attr_t *attr,
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   132
    ibt_path_flags_t flags, ibtl_cm_port_list_t **list_p);
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   133
ibt_status_t ibcm_arp_get_ibds(ibcm_arp_ibd_insts_t *ibdp);
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   134
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   135
#ifdef	__cplusplus
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   136
}
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   137
#endif
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   138
bb31c50bb3ab PSARC 2007/323 IBTF IP Addressing
hiremath
parents:
diff changeset
   139
#endif /* _SYS_IB_MGT_IBCM_IBCM_ARP_H */