summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/pkgdefs/SUNWrds/postinstall23
-rw-r--r--usr/src/uts/common/io/ib/clients/rds/rdsib_arp.c75
-rw-r--r--usr/src/uts/common/io/ib/clients/rds/rdsib_arp_link.c975
-rw-r--r--usr/src/uts/common/sys/ib/clients/rds/rdsib_arp.h9
-rw-r--r--usr/src/uts/intel/rdsib/Makefile4
-rwxr-xr-xusr/src/uts/sparc/rdsib/Makefile4
6 files changed, 151 insertions, 939 deletions
diff --git a/usr/src/pkgdefs/SUNWrds/postinstall b/usr/src/pkgdefs/SUNWrds/postinstall
index aea740d7a4..26814b9fbc 100644
--- a/usr/src/pkgdefs/SUNWrds/postinstall
+++ b/usr/src/pkgdefs/SUNWrds/postinstall
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -28,10 +28,23 @@
PATH="/usr/bin:/usr/sbin:/sbin:${PATH}"
export PATH
RDS_SOCK_ENTRY=" 30 1 0 /dev/rds"
+DRVPERM='* 0644 root sys'
+IB_DEV_DIR="/devices/ib"
-if [ "${BASEDIR:=/}" != "/" ]
+ADD_DRV="add_drv -b $BASEDIR"
+if [ "${BASEDIR:=/}" = "/" ]
then
- BASEDIR_OPT="-b $BASEDIR"
+ ADD_DRV="add_drv"
+
+ # Is there IB Hardware?
+ if [ ! -d $IB_DEV_DIR ]
+ then
+ #
+ # On a running system with NO IB hardware, modify the
+ # system files only.
+ #
+ ADD_DRV_OPT="-n"
+ fi
fi
not_installed() {
@@ -42,9 +55,9 @@ not_installed() {
EXIT=0
-not_installed rds || add_drv ${BASEDIR_OPT} -m '* 0644 root sys' rds || EXIT=1
+not_installed rds || $ADD_DRV -m "${DRVPERM}" rds || EXIT=1
-not_installed rdsib || add_drv ${BASEDIR_OPT} -m '* 0644 root sys' \
+not_installed rdsib || $ADD_DRV ${ADD_DRV_OPT} -m "${DRVPERM}" \
rdsib || EXIT=1
# Check rds entry exists in sock2path
diff --git a/usr/src/uts/common/io/ib/clients/rds/rdsib_arp.c b/usr/src/uts/common/io/ib/clients/rds/rdsib_arp.c
index d417b81430..3ca16ce227 100644
--- a/usr/src/uts/common/io/ib/clients/rds/rdsib_arp.c
+++ b/usr/src/uts/common/io/ib/clients/rds/rdsib_arp.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -50,16 +50,8 @@ extern int rds_pr_lookup(rds_streams_t *rdss, rds_ipx_addr_t *dst_addr,
rds_ipx_addr_t *src_addr, uint8_t localroute, uint32_t bound_dev_if,
rds_pr_comp_func_t func);
extern void rds_pr_arp_ack(mblk_t *mp);
-extern void rds_pr_ip6_ack(mblk_t *mp);
-extern void rds_pr_proto(queue_t *, mblk_t *);
-extern void rds_pr_ip_ack(mblk_t *mp);
-extern int rds_rts_announce(rds_streams_t *rdss);
extern void rds_prwqn_delete(rds_prwqn_t *wqnp);
-#if 0
-extern dev_info_t *rdsdip;
-#endif
-
extern ddi_taskq_t *rds_taskq;
/*
@@ -105,18 +97,10 @@ rds_lrsrv(queue_t *q)
RDS_DPRINTF4("rds_lrsrv", "Enter: 0x%p 0x%p", q, rdss);
- if (WR(q) == rdss->ipqueue) {
- while (mp = getq(q)) {
- rds_pr_ip_ack(mp);
- }
- } else if (WR(q) == rdss->arpqueue) {
+ if (WR(q) == rdss->arpqueue) {
while (mp = getq(q)) {
rds_pr_arp_ack(mp);
}
- } else if (WR(q) == rdss->ip6queue) {
- while (mp = getq(q)) {
- rds_pr_ip6_ack(mp);
- }
} else {
freemsg(mp);
}
@@ -184,10 +168,6 @@ rds_lrput(queue_t *q, mblk_t *mp)
(void) putq(q, mp);
qenable(q);
break;
- case M_PROTO:
- case M_PCPROTO:
- rds_pr_proto(q, mp);
- break;
default:
RDS_DPRINTF1(LABEL, "lrput: got unknown msg <0x%x>\n",
mp->b_datap->db_type);
@@ -249,9 +229,6 @@ int
rds_link_driver(rds_streams_t *rdss, char *path, queue_t **q, vnode_t **dev_vp)
{
struct stdata *dev_stp;
-#if 0
- cdevsw_impl_t *dp;
-#endif
vnode_t *vp;
int error;
queue_t *rq;
@@ -277,14 +254,8 @@ rds_link_driver(rds_streams_t *rdss, char *path, queue_t **q, vnode_t **dev_vp)
rq = RD(dev_stp->sd_wrq);
RD(rq)->q_ptr = WR(rq)->q_ptr = rdss;
-#if 0
- dp = &devimpl[rdss->major];
- setq(rq, &rds_lrinit, &rds_lwinit, dp->d_dmp, dp->d_qflag,
- dp->d_sqtype, B_TRUE);
-#else
setq(rq, &rds_lrinit, &rds_lwinit, NULL, QMTSAFE,
SQ_CI|SQ_CO, B_FALSE);
-#endif
RDS_DPRINTF4("rds_link_driver", "Return: %s", path);
@@ -335,10 +306,6 @@ rds_unlink_drivers(rds_streams_t *rdss)
{
RDS_DPRINTF4("rds_unlink_drivers", "Enter");
- if (rdss->ipqueue) {
- (void) rds_unlink_driver(&rdss->ipqueue, &rdss->ip_vp);
- }
-
if (rdss->arpqueue) {
(void) rds_unlink_driver(&rdss->arpqueue, &rdss->arp_vp);
}
@@ -358,36 +325,17 @@ rds_link_drivers(rds_streams_t *rdss)
RDS_DPRINTF4("rds_link_drivers", "Enter");
- if ((rc = rds_link_driver(rdss, "/dev/ip", &rdss->ipqueue,
- &rdss->ip_vp)) != 0) {
- RDS_DPRINTF1(LABEL, "rds_link_drivers: ip failed\n");
- return (rc);
- }
-
if ((rc = rds_link_driver(rdss, "/dev/arp", &rdss->arpqueue,
&rdss->arp_vp)) != 0) {
- (void) rds_unlink_driver(&rdss->ipqueue,
- &rdss->ip_vp);
RDS_DPRINTF1(LABEL, "rds_link_drivers: rds failed\n");
return (rc);
}
- /*
- * let IP know this is a routing socket
- */
- if ((rc = rds_rts_announce(rdss))) {
- RDS_DPRINTF1(LABEL, "link_drivers: rts_announce failed\n");
- (void) rds_unlink_drivers(rdss);
- return (rc);
- }
-
RDS_DPRINTF4("rds_link_drivers", "Return");
return (0);
}
-#define AF_RDS 30
-
typedef struct rds_get_ibaddr_args_s {
int ret;
ipaddr_t srcip;
@@ -413,9 +361,6 @@ rds_get_ibaddr_impl(void *arg)
mutex_init(&rdss->lock, NULL, MUTEX_DRIVER, NULL);
cv_init(&rdss->cv, NULL, CV_DRIVER, NULL);
-#if 0
- rdss->major = ddi_driver_major(rdsdip);
-#endif
ret = rds_link_drivers(rdss);
if (ret != 0) {
@@ -427,17 +372,19 @@ rds_get_ibaddr_impl(void *arg)
return;
}
- destaddr.family = AF_INET;
+ destaddr.family = AF_INET_OFFLOAD;
destaddr.un.ip4addr = htonl(argsp->destip);
- srcaddr.family = AF_INET;
+ srcaddr.family = AF_INET_OFFLOAD;
srcaddr.un.ip4addr = htonl(argsp->srcip);
- (void) rds_pr_lookup(rdss, &destaddr, &srcaddr, 0, NULL,
+ ret = rds_pr_lookup(rdss, &destaddr, &srcaddr, 0, NULL,
rds_get_ibaddr_complete);
- mutex_enter(&rdss->lock);
- cv_wait(&rdss->cv, &rdss->lock);
- mutex_exit(&rdss->lock);
+ if (ret == 0) {
+ mutex_enter(&rdss->lock);
+ cv_wait(&rdss->cv, &rdss->lock);
+ mutex_exit(&rdss->lock);
+ }
(void) rds_unlink_drivers(rdss);
@@ -445,9 +392,9 @@ rds_get_ibaddr_impl(void *arg)
if (argsp->ret == 0) {
argsp->sgid = rdss->wqnp->sgid;
argsp->dgid = rdss->wqnp->dgid;
+ rds_prwqn_delete(rdss->wqnp);
}
- rds_prwqn_delete(rdss->wqnp);
mutex_destroy(&rdss->lock);
cv_destroy(&rdss->cv);
kmem_free(rdss, sizeof (rds_streams_t));
diff --git a/usr/src/uts/common/io/ib/clients/rds/rdsib_arp_link.c b/usr/src/uts/common/io/ib/clients/rds/rdsib_arp_link.c
index 0fb17f073b..e883d2b347 100644
--- a/usr/src/uts/common/io/ib/clients/rds/rdsib_arp_link.c
+++ b/usr/src/uts/common/io/ib/clients/rds/rdsib_arp_link.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -57,6 +57,7 @@
#include <sys/ib/clients/ibd/ibd.h>
#include <sys/ib/clients/rds/rdsib_arp.h>
#include <sys/ib/clients/rds/rdsib_debug.h>
+#include <inet/ip_ftable.h>
extern int rds_pr_cache;
@@ -96,249 +97,12 @@ static area_t rds_area_template = {
};
static void rds_arp_timeout(void *arg);
+#ifdef DEBUG
void print_ib_mac(char *str, uint8_t *mac);
void print_ib_gid(char *str, uint8_t *mac);
+#endif
extern int rds_get_hca_info(rds_prwqn_t *wqnp);
void rds_pr_callback(rds_prwqn_t *wqnp, int status);
-extern int v4tol2addr(in_addr_t ipv4, uchar_t *l2addr);
-
-/*
- * send a IP_IOC_RTS_REQUEST to IP driver. this way we receive route
- * responses.
- * the message should be M_IOCTL -->> IP_IOC_RTS_REQUEST-->> NULL
- */
-int
-rds_rts_announce(rds_streams_t *rdss)
-{
- mblk_t *mp = NULL;
- mblk_t *mp1 = NULL;
- ipllc_t *ipllc;
- struct iocblk *ioc;
-
- RDS_DPRINTF4("rds_rts_announce", "Enter");
-
- mp = allocb(sizeof (ipllc_t), BPRI_HI);
- if (mp == NULL)
- return (ENOMEM);
- mp1 = allocb(sizeof (struct iocblk), BPRI_HI);
- if (mp1 == NULL) {
- freeb(mp);
- return (ENOMEM);
- }
-
- /* LINTED */
- ipllc = (ipllc_t *)mp->b_rptr;
- ipllc->ipllc_cmd = IP_IOC_RTS_REQUEST;
- ipllc->ipllc_name_offset = 0;
- ipllc->ipllc_name_length = 0;
- mp->b_wptr += sizeof (ipllc_t);
-
- /* LINTED */
- ioc = (struct iocblk *)mp1->b_rptr;
- ioc->ioc_cmd = IP_IOCTL;
- ioc->ioc_error = 0;
- ioc->ioc_cr = NULL;
- ioc->ioc_count = msgdsize(mp);
- mp1->b_wptr += sizeof (struct iocblk);
- mp1->b_datap->db_type = M_IOCTL;
- mp1->b_cont = mp;
-
- if (rdss->ipqueue) {
- if (canputnext(rdss->ipqueue)) {
- putnext(rdss->ipqueue, mp1);
- } else {
- (void) putq(rdss->ipqueue, mp1);
- qenable(rdss->ipqueue);
- }
- RDS_DPRINTF4("rds_rts_announce", "Return");
- return (0);
- } else {
- RDS_DPRINTF1(LABEL, "arp: ip driver not linked yet\n");
- RDS_DPRINTF4("rds_rts_announce", "Return: EBUSY");
- return (EBUSY);
- }
-}
-
-/*
- * get routing info from ip driver
- * the message is M_IOCTL -->> IP_IOC_RTS_REQUEST -->> struct (rt_msghdr_t)
- */
-int
-rds_get_route(rds_streams_t *rdss, rds_ipx_addr_t *dst_addr, rds_prwqn_t *wqnp)
-{
- mblk_t *mp = NULL;
- mblk_t *mp1 = NULL;
- mblk_t *bp = NULL;
- ipllc_t *ipllc;
- struct iocblk *ioc;
- rt_msghdr_t *rtm;
- struct sockaddr_in *sin;
- struct sockaddr_in6 *sin6;
-
- RDS_DPRINTF4("rds_get_route", "Enter");
-
- mp = allocb(sizeof (ipllc_t), BPRI_HI);
- if (mp == NULL) {
- return (NULL);
- }
- mp1 = allocb(sizeof (struct iocblk), BPRI_HI);
- if (mp1 == NULL) {
- freeb(mp);
- return (NULL);
- }
- bp = allocb(RDS_RTM_LEN, BPRI_HI);
- if (bp == NULL) {
- freeb(mp);
- freeb(mp1);
- return (NULL);
- }
- bzero(bp->b_rptr, RDS_RTM_LEN);
- /* LINTED */
- ipllc = (ipllc_t *)mp->b_rptr;
- ipllc->ipllc_cmd = IP_IOC_RTS_REQUEST;
- ipllc->ipllc_name_offset = 0;
- ipllc->ipllc_name_length = 0;
- mp->b_wptr += sizeof (ipllc_t);
- mp->b_cont = bp;
-
- /* LINTED */
- ioc = (struct iocblk *)mp1->b_rptr;
- ioc->ioc_cmd = IP_IOCTL;
- ioc->ioc_error = 0;
- ioc->ioc_cr = NULL;
- ioc->ioc_count = msgdsize(mp);
- mp1->b_wptr += sizeof (struct iocblk);
- mp1->b_datap->db_type = M_IOCTL;
- mp1->b_cont = mp;
-
- /* LINTED */
- rtm = (rt_msghdr_t *)bp->b_rptr;
- rtm->rtm_msglen = RDS_RTM_LEN;
- rtm->rtm_version = RTM_VERSION;
- rtm->rtm_type = RTM_GET;
- rtm->rtm_flags = (RTF_UP | RTF_GATEWAY | RTF_HOST | RTF_STATIC);
- rtm->rtm_addrs = (RTA_DST | RTA_IFP | RTA_SRC);
-
- /*
- * set wqnp in pid and seq fields
- * will be used to retrieve wqnp when the reply comes back
- */
- rtm->rtm_pid = (pid_t)((uint64_t)(uintptr_t)wqnp & 0xffffffff);
- rtm->rtm_seq = ((uint64_t)(uintptr_t)wqnp >> 32);
-
- if (RDS_IS_V4_ADDR(dst_addr)) {
- sin = (struct sockaddr_in *)&rtm[1];
- /*
- * Nitin: Change AF_RDS to AF_INET since rtsock does not
- * Know anything about AF_RDS
- * sin->sin_family = dst_addr->family;
- */
- sin->sin_family = AF_INET;
- sin->sin_port = 0;
- sin->sin_addr.s_addr = RDS_IPV4_ADDR(dst_addr);
- sin++;
- sin->sin_family = AF_LINK;
- } else {
- sin6 = (struct sockaddr_in6 *)&rtm[1];
- sin6->sin6_family = dst_addr->family;
- sin6->sin6_port = 0;
- sin6->sin6_addr = RDS_IPV6_ADDR(dst_addr);
- sin6++;
- sin6->sin6_family = AF_LINK;
- }
-
- bp->b_wptr += RDS_RTM_LEN;
-
- wqnp->flags |= RDS_PR_RT_PENDING;
- if (rdss->ipqueue) {
- if (canputnext(rdss->ipqueue)) {
- putnext(rdss->ipqueue, mp1);
- } else {
- (void) putq(rdss->ipqueue, mp1);
- qenable(rdss->ipqueue);
- }
- RDS_DPRINTF4("rds_get_route", "Return");
- return (0);
- } else {
- RDS_DPRINTF1(LABEL, "arp: ip driver not linked yet\n");
- RDS_DPRINTF4("rds_get_route", "Return: EBUSY");
- return (EBUSY);
- }
-}
-
-/*
- * issue SIOCLIFGETND ioctl to ipv6 driver. this would
- * query the ipv6 driver cache for ipv6 to mac address mapping.
- */
-int
-rds_query_ip6(rds_prwqn_t *wqnp)
-{
- mblk_t *mp = NULL;
- mblk_t *mp1 = NULL;
- mblk_t *mp2 = NULL;
- struct iocblk *iocb;
- struct sockaddr_in6 *sin6;
- struct lifreq *lifr;
- rds_streams_t *rdss = (rds_streams_t *)wqnp->arg;
-
- RDS_DPRINTF4("rds_query_ip6", "Enter: rdss: 0x%p, wqnp: 0x%p", rdss,
- wqnp);
-
- if ((mp = allocb(sizeof (struct iocblk) + sizeof (void *),
- BPRI_HI)) == NULL) {
- RDS_DPRINTF1(LABEL, "ip6_query: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr += sizeof (struct iocblk);
- /* LINTED */
- iocb = (struct iocblk *)mp->b_rptr;
- iocb->ioc_cmd = SIOCLIFGETND;
- DB_TYPE(mp) = M_IOCTL;
- iocb->ioc_count = msgdsize(mp);
- iocb->ioc_error = 0;
- iocb->ioc_cr = NULL;
-
- if ((mp1 = allocb(sizeof (void *), BPRI_HI)) == NULL) {
- freeb(mp);
- RDS_DPRINTF1(LABEL, "ip6_query: allocb1 failed\n");
- return (ENOMEM);
- }
-
- /* LINTED */
- *(uintptr_t *)mp->b_wptr = (uintptr_t)wqnp; /* store wqnp */
-
- if ((mp2 = allocb(sizeof (struct lifreq) + 8, BPRI_HI)) == NULL) {
- RDS_DPRINTF1(LABEL, "ip6_query: allocb2 failed\n");
- freeb(mp);
- freeb(mp1);
- return (ENOMEM);
- }
-
- bzero(mp2->b_rptr, sizeof (struct lifreq));
- /* LINTED */
- lifr = (struct lifreq *)mp2->b_rptr;
- sin6 = (struct sockaddr_in6 *)&lifr->lifr_addr;
- sin6->sin6_family = AF_INET6;
- bcopy(&wqnp->dst_addr.un.ip6addr,
- &sin6->sin6_addr, sizeof (in6_addr_t));
- (void) sprintf(lifr->lifr_name, "%s", wqnp->ifname);
-
- mp2->b_wptr += sizeof (struct lifreq);
- mp->b_cont = mp1;
- mp1->b_cont = mp2;
- iocb->ioc_count = msgdsize(mp);
- if (rdss->ip6queue) {
- (void) putq(rdss->ip6queue, mp);
- qenable(rdss->ip6queue);
- RDS_DPRINTF4("rds_query_ip6", "Return: 0x%p", wqnp);
- return (0);
- } else {
- RDS_DPRINTF1(LABEL, "arp: ipv6 driver not linked yet\n");
- freemsg(mp);
- RDS_DPRINTF4("rds_query_ip6", "Return: EBUSY");
- return (EBUSY);
- }
-}
/*
* issue a AR_ENTRY_QUERY to arp driver and schedule a timeout.
@@ -358,11 +122,7 @@ rds_query_arp(rds_prwqn_t *wqnp)
RDS_DPRINTF4("rds_query_arp", "Enter: rdss: 0x%p wqnp: 0x%p", rdss,
wqnp);
- if (RDS_IS_V4_ADDR(&wqnp->src_addr)) {
- name_offset = rds_areq_template.areq_name_offset;
- } else {
- name_offset = sizeof (areq_t) + (2 * sizeof (in6_addr_t));
- }
+ name_offset = rds_areq_template.areq_name_offset;
/*
* allocate mblk for AR_ENTRY_QUERY
@@ -398,25 +158,10 @@ rds_query_arp(rds_prwqn_t *wqnp)
areqp->areq_proto = wqnp->ifproto;
bcopy(&wqnp->ifproto, areqp->areq_sap, 2);
- if (RDS_IS_V4_ADDR(&wqnp->dst_addr)) {
- cp = (char *)areqp + areqp->areq_target_addr_offset;
- bcopy(&wqnp->dst_addr.un.ip4addr, cp, IP_ADDR_LEN);
- cp = (char *)areqp + areqp->areq_sender_addr_offset;
- bcopy(&wqnp->src_addr.un.ip4addr, cp, IP_ADDR_LEN);
- } else {
- /*
- * adjust the offsets for ipv6
- */
- areqp->areq_name_offset = sizeof (areq_t) +
- (2 * sizeof (in6_addr_t));
- cp = (char *)areqp + areqp->areq_target_addr_offset;
- bcopy(&wqnp->dst_addr.un.ip6addr, cp, sizeof (in6_addr_t));
-
- areqp->areq_sender_addr_offset = sizeof (areq_t) +
- (sizeof (in6_addr_t));
- cp = (char *)areqp + areqp->areq_sender_addr_offset;
- bcopy(&wqnp->src_addr.un.ip6addr, cp, sizeof (in6_addr_t));
- }
+ cp = (char *)areqp + areqp->areq_target_addr_offset;
+ bcopy(&wqnp->dst_addr.un.ip4addr, cp, IP_ADDR_LEN);
+ cp = (char *)areqp + areqp->areq_sender_addr_offset;
+ bcopy(&wqnp->src_addr.un.ip4addr, cp, IP_ADDR_LEN);
mp->b_cont = mp1;
@@ -428,19 +173,15 @@ rds_query_arp(rds_prwqn_t *wqnp)
wqnp->flags |= RDS_PR_ARP_PENDING;
wqnp->timeout_id = timeout(rds_arp_timeout, wqnp,
drv_usectohz(RDS_ARP_TIMEOUT * 1000));
- if (rdss->arpqueue) {
- if (canputnext(rdss->arpqueue)) {
- putnext(rdss->arpqueue, mp);
- } else {
- (void) putq(rdss->arpqueue, mp);
- qenable(rdss->arpqueue);
- }
- RDS_DPRINTF4("rds_query_arp", "Return: 0x%p", wqnp);
- return (0);
+ if (canputnext(rdss->arpqueue)) {
+ putnext(rdss->arpqueue, mp);
} else {
- RDS_DPRINTF4("rds_query_arp", "Return: EBUSY");
- return (EBUSY);
+ (void) putq(rdss->arpqueue, mp);
+ qenable(rdss->arpqueue);
}
+
+ RDS_DPRINTF4("rds_query_arp", "Return: 0x%p", wqnp);
+ return (0);
}
/*
@@ -511,22 +252,14 @@ rds_squery_arp(rds_prwqn_t *wqnp)
DB_TYPE(mp1) = M_IOCTL;
- if (rdss->arpqueue) {
- if (canputnext(rdss->arpqueue)) {
- putnext(rdss->arpqueue, mp1);
- } else {
- (void) putq(rdss->arpqueue, mp1);
- qenable(rdss->arpqueue);
- }
- RDS_DPRINTF4("rds_squery_arp", "Return: 0x%p", wqnp);
- return (0);
+ if (canputnext(rdss->arpqueue)) {
+ putnext(rdss->arpqueue, mp1);
} else {
- RDS_DPRINTF1(LABEL, "arp: arp driver not linked yet\n");
- RDS_DPRINTF4("rds_squery_arp", "Return: EBUSY");
- return (EBUSY);
+ (void) putq(rdss->arpqueue, mp1);
+ qenable(rdss->arpqueue);
}
-
-
+ RDS_DPRINTF4("rds_squery_arp", "Return: 0x%p", wqnp);
+ return (0);
}
/*
@@ -579,21 +312,14 @@ rds_arp_add(rds_prwqn_t *wqnp)
DB_TYPE(mp) = M_PROTO;
- if (rdss->arpqueue) {
- if (canputnext(rdss->arpqueue)) {
- putnext(rdss->arpqueue, mp);
- } else {
- (void) putq(rdss->arpqueue, mp);
- qenable(rdss->arpqueue);
- }
- RDS_DPRINTF4("rds_arp_add", "Return: 0x%p", wqnp);
- return (0);
+ if (canputnext(rdss->arpqueue)) {
+ putnext(rdss->arpqueue, mp);
} else {
- RDS_DPRINTF1(LABEL, "arp: arp driver not linked yet\n");
- RDS_DPRINTF4("rds_arp_add", "Return: EBUSY");
- return (EBUSY);
+ (void) putq(rdss->arpqueue, mp);
+ qenable(rdss->arpqueue);
}
-
+ RDS_DPRINTF4("rds_arp_add", "Return: 0x%p", wqnp);
+ return (0);
}
@@ -618,47 +344,6 @@ rds_arp_timeout(void *arg)
}
/*
- * timeout routine for ipv6 after sending a dummp icmp packet.
- */
-static void
-rds_ip6_timeout(void *arg)
-{
- rds_prwqn_t *wqnp = (rds_prwqn_t *)arg;
- rds_streams_t *rdss = (rds_streams_t *)wqnp->arg;
- int rc;
-
- RDS_DPRINTF4("rds_ip6_timeout", "Enter: rdss: 0x%p wqnp: 0x%p",
- rdss, wqnp);
-
- /*
- * make sure this is a valid request. the request could have been
- * cancelled
- */
- mutex_enter(&rdss->lock);
-
- wqnp->retries++;
- if (wqnp->retries == RDS_MAX_IP6_RETRIES) {
- rc = EHOSTUNREACH;
- goto user_callback;
- }
-
- /*
- * check if ND succeded
- */
- if ((rc = rds_query_ip6(wqnp)) != 0) {
- goto user_callback;
- }
- mutex_exit(&rdss->lock);
- return;
-
-user_callback:
- mutex_exit(&rdss->lock);
- rds_pr_callback(wqnp, rc);
-
- RDS_DPRINTF4("rds_ip6_timeout", "Return: 0x%p", wqnp);
-}
-
-/*
* delete a wait queue node from the list.
* assumes mutex is acquired
*/
@@ -703,9 +388,7 @@ rds_create_prwqn(rds_streams_t *rdss, rds_ipx_addr_t *dst_addr,
wqnp->arg = rdss;
wqnp->localroute = localroute;
wqnp->bound_dev_if = bound_dev_if;
-
- wqnp->ifproto = (dst_addr->family == AF_INET) ?
- ETHERTYPE_IP : ETHERTYPE_IPV6;
+ wqnp->ifproto = ETHERTYPE_IP;
rdss->wqnp = wqnp;
@@ -728,44 +411,110 @@ rds_pr_callback(rds_prwqn_t *wqnp, int status)
RDS_DPRINTF4("rds_pr_callback", "Return: 0x%p", wqnp);
}
-#define AF_RDS 30
+static int
+rds_check_interface(rds_prwqn_t *wqnp, int length)
+{
+ /*
+ * if the i/f is not ib or lo device, fail the request
+ */
+ if (bcmp(wqnp->ifname, "ibd", 3) == 0) {
+ if (length != IPOIB_ADDRL) {
+ return (EINVAL);
+ }
+ } else if (bcmp(wqnp->ifname, "lo", 2)) {
+ return (ETIMEDOUT);
+ }
+
+ return (0);
+}
+
int
rds_pr_lookup(rds_streams_t *rdss, rds_ipx_addr_t *dst_addr,
rds_ipx_addr_t *src_addr, uint8_t localroute, uint32_t bound_dev_if,
rds_pr_comp_func_t func)
{
- int rc;
rds_prwqn_t *wqnp;
+ ire_t *ire;
+ ire_t *src_ire;
+ ipif_t *ipif;
+ ill_t *ill;
+ int length;
+ ip_stack_t *ipst;
+
+
RDS_DPRINTF4("rds_pr_lookup", "Enter: src 0x%x dest 0x%x", src_addr,
dst_addr);
- /*
- * make sure address in not multicast
- */
- if (dst_addr->family == AF_RDS || dst_addr->family == AF_INET) {
- if (IN_MULTICAST(dst_addr->un.ip4addr)) {
- return (EINVAL);
- }
- } else if (dst_addr->family == AF_INET6) {
- if (IN6_IS_ADDR_MULTICAST(&dst_addr->un.ip6addr)) {
- return (EINVAL);
- }
- } else {
- return (EAFNOSUPPORT);
+ if (dst_addr->family != AF_INET_OFFLOAD) {
+ rdss->status = EAFNOSUPPORT;
+ return (1);
}
-
if ((wqnp = rds_create_prwqn(rdss, dst_addr,
src_addr, localroute, bound_dev_if, func)) == NULL) {
- return (ENOMEM);
+ rdss->status = ENOMEM;
+ return (1);
}
+ ipst = netstack_find_by_zoneid(GLOBAL_ZONEID)->netstack_ip;
/*
- * get the routing info
+ * Get the ire for the local address
*/
- if (rc = rds_get_route(rdss, dst_addr, wqnp)) {
- return (rc);
+
+ src_ire = ire_ctable_lookup(RDS_IPV4_ADDR(src_addr), NULL,
+ IRE_LOCAL, NULL, ALL_ZONES, NULL, MATCH_IRE_TYPE, ipst);
+
+
+ if (src_ire == NULL) {
+ netstack_rele(ipst->ips_netstack);
+ rds_prwqn_delete(wqnp);
+ rdss->status = EFAULT;
+ return (1);
+ }
+
+
+ /*
+ * get an ire for the destination adress with the matching source
+ * address
+ */
+ ire = ire_ftable_lookup(RDS_IPV4_ADDR(dst_addr), 0, 0, 0,
+ src_ire->ire_ipif, 0, src_ire->ire_zoneid, 0, NULL, MATCH_IRE_SRC,
+ ipst);
+
+ netstack_rele(ipst->ips_netstack);
+
+ if (ire == NULL) {
+ IRE_REFRELE(src_ire);
+ rds_prwqn_delete(wqnp);
+ rdss->status = EFAULT;
+ return (1);
+ }
+
+ wqnp->src_addr.un.ip4addr = ire->ire_src_addr;
+ wqnp->src_addr.family = AF_INET_OFFLOAD;
+
+ ipif = src_ire->ire_ipif;
+ ill = ipif->ipif_ill;
+ length = ill->ill_name_length;
+ bcopy(ill->ill_name, &wqnp->ifname, ill->ill_name_length);
+ wqnp->ifname[length] = '\0';
+ bcopy(ill->ill_phys_addr, &wqnp->src_mac,
+ ill->ill_phys_addr_length);
+
+ IRE_REFRELE(ire);
+ IRE_REFRELE(src_ire);
+
+ rdss->status = rds_check_interface(wqnp, ill->ill_phys_addr_length);
+ if (rdss->status) {
+ rds_prwqn_delete(wqnp);
+ return (1);
+ }
+
+ rdss->status = rds_squery_arp(wqnp);
+ if (rdss->status) {
+ rds_prwqn_delete(wqnp);
+ return (1);
}
RDS_DPRINTF4("rds_pr_lookup", "Return: 0x%p", wqnp);
@@ -975,498 +724,7 @@ rds_pr_arp_ack(mblk_t *mp)
RDS_DPRINTF4("rds_pr_arp_ack", "Return: 0x%p", mp);
}
-int
-rds_copy_sockaddr(struct sockaddr *sa, rds_ipx_addr_t *addr)
-{
- struct sockaddr_in *sin;
- struct sockaddr_in6 *sin6;
-
- RDS_DPRINTF4("rds_copy_sockaddr", "Enter");
-
- addr->family = sa->sa_family;
- switch (sa->sa_family) {
- case AF_INET:
- /* LINTED */
- sin = (struct sockaddr_in *)sa;
- addr->un.ip4addr = sin->sin_addr.s_addr;
- RDS_DPRINTF4("rds_copy_sockaddr", "Return: AF_INET");
- return (sizeof (struct sockaddr_in));
- case AF_INET6:
- /* LINTED */
- sin6 = (struct sockaddr_in6 *)sa;
- bcopy(&sin6->sin6_addr.s6_addr,
- &addr->un.ip6addr, sizeof (in6_addr_t));
- RDS_DPRINTF4("rds_copy_sockaddr", "Return: AF_INET6");
- return (sizeof (struct sockaddr_in6));
- default:
- RDS_DPRINTF4("rds_copy_sockaddr", "Return: Default");
- return (0);
- }
-}
-
-/*
- * do sanity checks on the link-level sockaddr
- * the i/f has has to be an ib or lo device
- */
-int
-rds_copy_sockdl(struct sockaddr_dl *sdl, rds_prwqn_t *wqnp)
-{
- RDS_DPRINTF4("rds_copy_sockdl", "Enter: 0x%p", wqnp);
-
- if (!sdl->sdl_nlen) {
- RDS_DPRINTF1(LABEL, "copy_sockdl: invalid name len %d\n",
- sdl->sdl_nlen);
- return (EINVAL);
- }
- bcopy(sdl->sdl_data, wqnp->ifname, sdl->sdl_nlen);
- wqnp->ifname[sdl->sdl_nlen] = '\0';
-
- /*
- * if the i/f is not ib or lo device, fail the request
- */
- if (bcmp(wqnp->ifname, "ibd", 3) == 0) {
- if (sdl->sdl_alen != IPOIB_ADDRL) {
- RDS_DPRINTF1(LABEL, "Error: i/f is not ibd: <%s>\n",
- wqnp->ifname);
- return (EINVAL);
- }
-
- bcopy(&sdl->sdl_data[sdl->sdl_nlen],
- &wqnp->src_mac, IPOIB_ADDRL);
- } else if (bcmp(wqnp->ifname, "lo", 2)) {
- RDS_DPRINTF2(LABEL, "Invalid Interface: %s", wqnp->ifname);
- return (EINVAL);
- }
-
- RDS_DPRINTF4("rds_copy_sockdl", "Return: 0x%p", wqnp);
-
- return (0);
-}
-
-int
-rds_extract_route_fields(rt_msghdr_t *rtm, rds_prwqn_t *wqnp)
-{
- int rtm_addrs;
- struct sockaddr_dl *sdl;
- uchar_t *cp;
- int i;
- struct sockaddr *sa;
- int addr_bits;
- rds_ipx_addr_t addr;
- int rc;
-
- RDS_DPRINTF4("rds_extract_route_fields", "Enter: 0x%p", wqnp);
-
- /*
- * go thru' the packed data at the end of rtm
- */
- cp = (uchar_t *)&rtm[1];
- rtm_addrs = rtm->rtm_addrs;
- for (i = 0; i < RTA_NUMBITS; i++) {
- addr_bits = (rtm_addrs & (1 << i));
- if (addr_bits == 0) {
- continue;
- }
- /* LINTED */
- sa = (struct sockaddr *)cp;
- switch (addr_bits) {
- case RTA_DST:
- cp += rds_copy_sockaddr(sa, &addr);
- break;
- case RTA_GATEWAY:
- cp += rds_copy_sockaddr(sa, &wqnp->gateway);
- break;
- case RTA_NETMASK:
- cp += rds_copy_sockaddr(sa, &wqnp->netmask);
- break;
- case RTA_IFP:
- /* LINTED */
- sdl = (struct sockaddr_dl *)cp;
-
- if ((rc = rds_copy_sockdl(sdl, wqnp)) != 0) {
- goto error;
- }
- cp += sizeof (struct sockaddr_dl);
- break;
- case RTA_IFA:
- case RTA_SRC:
- cp += rds_copy_sockaddr(sa, &wqnp->src_addr);
- break;
- case RTA_AUTHOR:
- cp += rds_copy_sockaddr(sa, &addr);
- break;
- case RTA_BRD:
- cp += rds_copy_sockaddr(sa, &addr);
- break;
- default:
- RDS_DPRINTF1(LABEL, "got %d in rts msg\n",
- (rtm_addrs & (1 << i)));
- break;
-
- }
- }
-
- RDS_DPRINTF4("rds_extract_route_fields", "Return: 0x%p", wqnp);
-
- return (0);
-
-error:
- return (rc);
-}
-
-/*
- * called from lrput.
- * process a IP_IOCTL reply from ip
- */
-void
-rds_pr_ip_ack(mblk_t *mp)
-{
- rt_msghdr_t *rtm;
- rds_prwqn_t *wqnp;
- rds_streams_t *rdss;
- uintptr_t l;
- int rc;
- int len;
-
- RDS_DPRINTF4("rds_pr_ip_ack", "Enter: 0x%p", mp);
-
- /*
- * RTS info is present in a single mblk. if more than one mblk
- * is present, then this should be the original RTM_GET request
- */
- if (mp->b_cont) {
- freemsg(mp);
- return;
- }
-
- /*
- * sanity checks on the mblk
- */
- /* LINTED */
- rtm = (rt_msghdr_t *)mp->b_rptr;
- /* LINTED */
- if ((MBLKL(mp) < sizeof (rt_msghdr_t)) ||
- (rtm->rtm_version != RTM_VERSION) ||
- /* LINTED */
- (rtm->rtm_type != RTM_GET) || (MBLKL(mp) != rtm->rtm_msglen)) {
- freemsg(mp);
- return;
- }
-
- l = ((uint64_t)rtm->rtm_seq << 32) | (uint32_t)rtm->rtm_pid;
- wqnp = (rds_prwqn_t *)l;
- rdss = (rds_streams_t *)wqnp->arg;
-
- mutex_enter(&rdss->lock);
-
- /*
- * check for rts error
- */
- if (rtm->rtm_errno) {
- rc = rtm->rtm_errno;
- RDS_DPRINTF1(LABEL, "ip_ioctl_ack: got rtm errono:%d\n", rc);
- goto user_callback;
- }
-
- /*
- * extract all the route fields
- */
- if (rc = rds_extract_route_fields(rtm, wqnp)) {
- freemsg(mp);
- goto user_callback;
- }
- freemsg(mp);
-
- if (bcmp(wqnp->ifname, "lo", 2) != 0) {
- /*
- * issue AR_ENTRY_QUERY to get the arp address of dest
- */
- wqnp->flags &= ~RDS_PR_RT_PENDING;
-
- RDS_DPRINTF3(LABEL, "ip_ack: outgoing if: %s dst: %d usr: %d",
- wqnp->ifname, wqnp->dst_addr.family,
- wqnp->usrc_addr.family);
-
- /*
- * if localroute is set, then make sure the rts
- * returned gateway address is the same as the
- * supplied source address
- */
- if (wqnp->localroute) {
- len = (wqnp->dst_addr.family == AF_INET) ?
- IP_ADDR_LEN : sizeof (in6_addr_t);
-
- if (bcmp(&wqnp->gateway.un, &wqnp->src_addr.un, len)) {
- rc = ENETUNREACH;
- RDS_DPRINTF1(LABEL,
- "ip_ack: local route error:%d\n", rc);
- goto user_callback;
- }
- }
-
- /*
- * if the user supplied a address, then verify rts returned
- * the same address
- */
- if (wqnp->usrc_addr.family) {
- len = (wqnp->usrc_addr.family == AF_INET) ?
- IP_ADDR_LEN : sizeof (in6_addr_t);
-
- if (bcmp(&wqnp->usrc_addr.un,
- &wqnp->src_addr.un, len)) {
- rc = ENETUNREACH;
- RDS_DPRINTF1(LABEL,
- "ip_ack: src addr mismatch:%d\n", rc);
- goto user_callback;
- }
- }
-
- /*
- * at this stage, we have the source address and the IB
- * interface, now get the destination mac address from
- * arp or ipv6 drivers
- */
- if (wqnp->dst_addr.family == AF_INET) {
- if ((rc = rds_squery_arp(wqnp)) != 0) {
- RDS_DPRINTF1(LABEL,
- "ip_ack: arp_req error:%d\n", rc);
- goto user_callback;
- }
- } else {
- if ((rc = rds_query_ip6(wqnp)) != 0) {
- RDS_DPRINTF1(LABEL,
- "ip_ack: ip6_query error:%d\n", rc);
- goto user_callback;
- }
- }
- }
- mutex_exit(&rdss->lock);
-
- RDS_DPRINTF4("rds_pr_ip_ack", "Return: 0x%p", wqnp);
-
- return;
-
-user_callback:
- mutex_exit(&rdss->lock);
- /*
- * indicate to user
- */
- rds_pr_callback(wqnp, rc);
-}
-
-/*
- * send down a T_unitdata_req, which would trigger
- * neighbour discovery process
- */
-void
-rds_ip6_send_pkt(rds_prwqn_t *wqnp)
-{
- mblk_t *mp;
- mblk_t *mp1;
- struct T_unitdata_req *tur;
- struct sockaddr_in6 *sin6;
- rds_streams_t *rdss = (rds_streams_t *)wqnp->arg;
- uint8_t *rptr;
- int rc;
-
- RDS_DPRINTF4("rds_ip6_send_pkt", "Enter: rdss: 0x%p wqnp: 0x%p", rdss,
- wqnp);
-
- if ((mp = allocb(sizeof (struct T_unitdata_req) +
- sizeof (struct sockaddr_in6), BPRI_HI)) == NULL) {
- rc = ENOMEM;
- goto user_callback;
- }
- if ((mp1 = allocb(100, BPRI_HI)) == NULL) {
- rc = ENOMEM;
- freemsg(mp);
- goto user_callback;
- }
- /* LINTED */
- tur = (struct T_unitdata_req *)mp->b_rptr;
- tur->PRIM_type = T_UNITDATA_REQ;
- tur->DEST_length = sizeof (struct sockaddr_in6);
- tur->DEST_offset = sizeof (struct T_unitdata_req);
- tur->OPT_length = 0;
- tur->OPT_offset = 0;
-
- rptr = mp->b_rptr;
- /* LINTED */
- sin6 = (struct sockaddr_in6 *)&rptr[tur->DEST_offset];
- sin6->sin6_family = AF_INET6;
- bcopy(&wqnp->dst_addr.un.ip6addr,
- &sin6->sin6_addr, sizeof (in6_addr_t));
- sin6->sin6_port = 9;
- sin6->sin6_flowinfo = 0;
- sin6->sin6_scope_id = 0;
- sin6->__sin6_src_id = 0;
- mp->b_wptr += sizeof (struct T_unitdata_req) +
- sizeof (struct sockaddr_in6);
-
- mp1->b_wptr += 100;
- mp1->b_rptr += 90;
- mp->b_cont = mp1;
- DB_TYPE(mp) = M_PROTO;
-
- wqnp->timeout_id = timeout(rds_ip6_timeout, wqnp,
- drv_usectohz(RDS_IP6_TIMEOUT));
- if (rdss->ip6queue) {
- if (canputnext(rdss->ip6queue)) {
- putnext(rdss->ip6queue, mp);
- } else {
- (void) putq(rdss->ip6queue, mp);
- qenable(rdss->ip6queue);
- }
- return;
- } else {
- RDS_DPRINTF1(LABEL, "arp: ipv6 driver not linked yet\n");
- (void) untimeout(wqnp->timeout_id);
- freemsg(mp);
- rc = EBUSY;
- }
-user_callback:
- /*
- * indicate to user
- */
- rds_pr_callback(wqnp, rc);
-
- RDS_DPRINTF4("rds_ip6_send_pkt", "Return: 0x%p", wqnp);
-}
-
-/*
- * called from lrput.
- * process SIOCLIFGETND reply from ip6
- */
-void
-rds_pr_ip6_ack(mblk_t *mp)
-{
- rds_prwqn_t *wqnp;
- mblk_t *bp;
- struct iocblk *iocb;
- struct lifreq *lifreq;
- rds_streams_t *rdss;
-
- RDS_DPRINTF4("rds_pr_ip6_ack", "Enter");
-
- if (DB_TYPE(mp) != M_IOCACK) {
- RDS_DPRINTF1(LABEL, "ip6_ioctl: got %d type\n", DB_TYPE(mp));
- freemsg(mp);
- }
- /* LINTED */
- iocb = (struct iocblk *)mp->b_rptr;
- if (iocb->ioc_cmd != SIOCLIFGETND) {
- RDS_DPRINTF1(LABEL, "ip6_ioctl: got %d cmd\n", iocb->ioc_cmd);
- freemsg(mp);
- }
-
- /* LINTED */
- wqnp = *(rds_prwqn_t **)mp->b_wptr; /* retrieve wqnp */
- rdss = (rds_streams_t *)wqnp->arg;
-
- RDS_DPRINTF4("rds_pr_ip6_ack", "rdss: 0x%p wqnp: 0x%p", rdss, wqnp);
-
- mutex_enter(&rdss->lock);
-
- /*
- * if there is an error, then trigger a ND by sending a
- * dummy udp apcket
- */
- /* LINTED */
- iocb = (struct iocblk *)mp->b_rptr;
- if (iocb->ioc_error) {
- goto send_packet;
- }
-
- /*
- * on successfull completion of SIOCLIFGETND, the second mblock
- * has the lifreq struct
- */
- bp = mp->b_cont;
- if (bp == NULL) {
- goto user_callback;
- }
-
- /*
- * if hdw_len is zero, then trigger a ND by sending
- * a dummy packet
- */
- /* LINTED */
- if (MBLKL(bp) < sizeof (struct lifreq)) {
- goto user_callback;
- }
- /* LINTED */
- lifreq = (struct lifreq *)bp->b_rptr;
- if (lifreq->lifr_nd.lnr_hdw_len == 0) {
- goto send_packet;
- }
-
- /*
- * the request was successfull. complete the lookup
- */
- bcopy(lifreq->lifr_nd.lnr_hdw_addr,
- &wqnp->dst_mac, sizeof (ipoib_mac_t));
-
- bcopy(&wqnp->src_mac.ipoib_gidpref, &wqnp->sgid, sizeof (ib_gid_t));
- bcopy(&wqnp->dst_mac.ipoib_gidpref, &wqnp->dgid, sizeof (ib_gid_t));
- freemsg(mp);
-
- H2N_GID(wqnp->sgid);
- H2N_GID(wqnp->dgid);
-
- mutex_exit(&rdss->lock);
-
- rds_pr_callback(wqnp, 0);
-
- return;
-
-send_packet:
-
- freemsg(mp);
- mutex_exit(&rdss->lock);
- rds_ip6_send_pkt(wqnp);
-
- RDS_DPRINTF4("rds_pr_ip6_ack", "Return: 0x%p", wqnp);
-
- return;
-
-user_callback:
- freemsg(mp);
- mutex_exit(&rdss->lock);
-
- rds_pr_callback(wqnp, ENXIO);
-}
-
-/*
- * process PROTO message.
- * we should get T_BIND_ACK for icmp T_BIND_REQ on ipv6 stream. if T_BIND_REQ
- * had failed, then diable ipv6 stream
- */
-void
-rds_pr_proto(queue_t *q, mblk_t *mp)
-{
- struct T_error_ack *tea;
- rds_streams_t *rdss = (rds_streams_t *)q->q_ptr;
-
- RDS_DPRINTF4("rds_pr_proto", "Enter: q: 0x%p rdss: 0x%p", q, rdss);
-
- if (WR(q) != rdss->ip6queue) {
- freemsg(mp);
- return;
- }
- /* LINTED */
- tea = (struct T_error_ack *)mp->b_rptr;
- if (tea->PRIM_type == T_ERROR_ACK) {
- if (tea->ERROR_prim == T_BIND_REQ) {
- rdss->ip6queue = NULL;
- RDS_DPRINTF1(LABEL,
- "arp: icmp bind failed. ipv6 stream down\n");
- }
- }
- freemsg(mp);
-
- RDS_DPRINTF4("rds_pr_proto", "Return: 0x%p", q);
-}
-
+#ifdef DEBUG
void
print_ib_mac(char *str, uint8_t *mac)
{
@@ -1504,3 +762,4 @@ print_ib_gid(char *str, uint8_t *mac)
mac[10] & 0xff, mac[11] & 0xff,
mac[12] & 0xff, mac[13] & 0xff, mac[14] & 0xff, mac[15] & 0xff);
}
+#endif
diff --git a/usr/src/uts/common/sys/ib/clients/rds/rdsib_arp.h b/usr/src/uts/common/sys/ib/clients/rds/rdsib_arp.h
index d7ed375d51..b102697d35 100644
--- a/usr/src/uts/common/sys/ib/clients/rds/rdsib_arp.h
+++ b/usr/src/uts/common/sys/ib/clients/rds/rdsib_arp.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -117,8 +117,6 @@ typedef struct rds_prwqn {
rds_ipx_addr_t dst_addr; /* user supplied dest address */
rds_ipx_addr_t src_addr; /* rts's view of source address */
- rds_ipx_addr_t gateway; /* rts returned gateway address */
- rds_ipx_addr_t netmask; /* rts returned netmask */
char ifname[RDS_MAX_IFNAME_LEN];
int ibd_instance;
uint16_t ifproto;
@@ -136,13 +134,8 @@ typedef struct rds_prwqn {
typedef struct rds_streams_s {
kmutex_t lock;
kcondvar_t cv;
- major_t major;
- queue_t *ipqueue;
- vnode_t *ip_vp;
queue_t *arpqueue;
vnode_t *arp_vp;
- queue_t *ip6queue;
- vnode_t *ip6_vp;
int status;
rds_prwqn_t *wqnp;
} rds_streams_t;
diff --git a/usr/src/uts/intel/rdsib/Makefile b/usr/src/uts/intel/rdsib/Makefile
index c83fbb9e0e..6041335f01 100644
--- a/usr/src/uts/intel/rdsib/Makefile
+++ b/usr/src/uts/intel/rdsib/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -38,7 +38,7 @@ MODULE = rdsib
OBJECTS = $(RDSIB_OBJS:%=$(OBJS_DIR)/%)
LINTS = $(RDSIB_OBJS:%.o=$(LINTS_DIR)/%.ln)
ROOTMODULE = $(ROOT_DRV_DIR)/$(MODULE)
-LDFLAGS += -dy -Ndrv/rds -Nmisc/ibtl -Nmisc/ibcm
+LDFLAGS += -dy -Ndrv/rds -Nmisc/ibtl -Nmisc/ibcm -Ndrv/ip
CONF_SRCDIR = $(UTSBASE)/common/io/ib/clients/rds
#
# Include common rules.
diff --git a/usr/src/uts/sparc/rdsib/Makefile b/usr/src/uts/sparc/rdsib/Makefile
index 8015c95aa7..ee14ea9c1d 100755
--- a/usr/src/uts/sparc/rdsib/Makefile
+++ b/usr/src/uts/sparc/rdsib/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -61,7 +61,7 @@ INSTALL_TARGET = $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
#
CFLAGS += $(CCVERBOSE)
-LDFLAGS += -dy -Ndrv/rds -Nmisc/ibtl -Nmisc/ibcm
+LDFLAGS += -dy -Ndrv/rds -Nmisc/ibtl -Nmisc/ibcm -Ndrv/ip
#
# Default build targets.