Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Nov 2007 06:59:47 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 128808 for review
Message-ID:  <200711080659.lA86xlta000200@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=128808

Change 128808 by kmacy@kmacy:storage:toestack on 2007/11/08 06:58:50

	fill in some "notyet" functionality

Affected files ...

.. //depot/projects/toestack/sys/dev/cxgb/cxgb_osdep.h#10 edit
.. //depot/projects/toestack/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#18 edit

Differences ...

==== //depot/projects/toestack/sys/dev/cxgb/cxgb_osdep.h#10 (text+ko) ====

@@ -72,11 +72,16 @@
 #define m_get_sgl(m) ((bus_dma_segment_t *)(m)->m_pkthdr.header)
 #define m_set_sgllen(m, len) ((m)->m_pkthdr.ether_vtag = len)
 #define m_get_sgllen(m) ((m)->m_pkthdr.ether_vtag)
+
 /*
  * XXX FIXME
  */
 #define m_set_toep(m, a) ((m)->m_pkthdr.header = (a))
 #define m_get_toep(m) ((m)->m_pkthdr.header)
+#define m_set_handler(m, handler) ((m)->m_pkthdr.header = (handler))
+
+#define m_set_socket(m, a) ((m)->m_pkthdr.header = (a))
+#define m_get_socket(m) ((m)->m_pkthdr.header)
 
 #define MT_DONTFREE  128
 

==== //depot/projects/toestack/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#18 (text+ko) ====

@@ -170,7 +170,21 @@
         return cntrl;
 }
 
+/*
+ * Populate a TID_RELEASE WR.  The skb must be already propely sized.
+ */
+static inline void
+mk_tid_release(struct mbuf *m, const struct socket *so, unsigned int tid)
+{
+	struct cpl_tid_release *req;
 
+	m_set_priority(m, mkprio(CPL_PRIORITY_SETUP, so));
+	m->m_pkthdr.len = m->m_len = sizeof(*req);
+	req = mtod(m, struct cpl_tid_release *);
+	req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
+	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, tid));
+}
+
 static inline void
 make_tx_data_wr(struct socket *so, struct mbuf *m, int len, struct mbuf *tail)
 {
@@ -868,7 +882,6 @@
 	return min(wnd, max_rcv_wnd);
 }
 
-
 /*
  * Assign offload parameters to some socket fields.  This code is used by
  * both active and passive opens.
@@ -1951,12 +1964,11 @@
 pass_accept_rpl_arp_failure(struct t3cdev *cdev, struct mbuf *m)
 {
 
-	printf("%s UNIMPLEMENTED\n", __FUNCTION__);
 #ifdef notyet	
 	TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
 	BLOG_SKB_CB(skb)->dev = TOE_DEV(skb->sk);
-	handle_pass_open_arp_failure, skb->sk, skb);
 #endif
+	handle_pass_open_arp_failure(m_get_socket(m), m);
 }
 
 /*
@@ -2086,11 +2098,10 @@
  * by the TOE.
  */
 static void
-process_pass_accept_req(struct socket *so, struct mbuf *m, struct toedev *tdev)
+process_pass_accept_req(struct socket *so, struct mbuf *m, struct toedev *tdev,
+    struct listen_ctx *lctx)
 {
-#ifdef notyet	
 	int rt_flags;
-#endif	
 	struct socket *newso;
 	struct l2t_entry *e;
 	struct iff_mac tim;
@@ -2100,10 +2111,8 @@
 	unsigned int tid = GET_TID(req);
 	struct tom_data *d = TOM_DATA(tdev);
 	struct t3cdev *cdev = d->cdev;
-	struct tcpcb *tp = sototcpcb(so);
+	struct tcpcb *newtp, *tp = sototcpcb(so);
 	struct toepcb *toep, *newtoep;
-
-	UNIMPLEMENTED();
 	
 	reply_mbuf = m_gethdr(M_NOWAIT, MT_DATA);
 	if (__predict_false(!reply_mbuf)) {
@@ -2118,17 +2127,15 @@
 
 	if (tp->t_state != TCPS_LISTEN)
 		goto reject;
-#ifdef notyet	
-	if (inet_csk_reqsk_queue_is_full(sk))
-		goto reject;
-	if (sk_acceptq_is_full(sk) && d->conf.soft_backlog_limit)
-		goto reject;
-#endif
 	tim.mac_addr = req->dst_mac;
 	tim.vlan_tag = ntohs(req->vlan_tag);
 	if (cdev->ctl(cdev, GET_IFF_FROM_MAC, &tim) < 0 || !tim.dev)
 		goto reject;
 #ifdef notyet
+	/*
+	 * XXX do route lookup to confirm that we're still listening on this
+	 * address
+	 */
 	if (ip_route_input(skb, req->local_ip, req->peer_ip,
 			   G_PASS_OPEN_TOS(ntohl(req->tos_tid)), tim.dev))
 		goto reject;
@@ -2136,16 +2143,25 @@
 		(RTCF_BROADCAST | RTCF_MULTICAST | RTCF_LOCAL);
 	dst_release(skb->dst);	// done with the input route, release it
 	skb->dst = NULL;
-	if (rt_flags != RTCF_LOCAL)
+	
+	if ((rt_flags & RTF_LOCAL) == 0)
 		goto reject;
 #endif
-	newso = mk_pass_sock(so, tdev, tid, req);
-	if (!newso)
+	/*
+	 * XXX
+	 */
+	rt_flags = RTF_LOCAL;
+	if ((rt_flags & RTF_LOCAL) == 0)
 		goto reject;
-#ifdef notyet	
-	inet_csk_reqsk_queue_added(sk, TCP_TIMEOUT_INIT);
-	synq_add(sk, newsk);
-#endif
+	
+	
+	newso = sonewconn(so, SS_ISCONNECTED);
+	newtp = sototcpcb(so);
+	/*
+	 * XXX need to inherit ULP mode
+	 */
+	newtoep = toepcb_alloc(newtp);
+	
 	/* Don't get a reference, newsk starts out with ref count 2 */
 	cxgb_insert_tid(cdev, d->client, newso, tid);
 
@@ -2155,11 +2171,9 @@
 		if (!ddp_mbuf)
 			newtoep->tp_ulp_mode = 0;
 	}
-#ifdef notyet
-	reply_skb->sk = newsk;
-#endif	
+
+	m_set_socket(reply_mbuf, newso);
 	set_arp_failure_handler(reply_mbuf, pass_accept_rpl_arp_failure);
-
 	e = newtoep->tp_l2t;
 
 	rpl = cplhdr(reply_mbuf);
@@ -2189,12 +2203,8 @@
 reject:
 	if (tdev->ttid == TOE_ID_CHELSIO_T3)
 		mk_pass_accept_rpl(reply_mbuf, m);
-	else {
-#ifdef notyet
-		__skb_trim(reply_skb, 0);
+	else 
 		mk_tid_release(reply_mbuf, NULL, tid);
-#endif		
-	}
 	cxgb_ofld_send(cdev, reply_mbuf);
 	m_free(m);
 out:
@@ -2246,8 +2256,8 @@
 	}
 #endif
 
-	process_pass_accept_req(lso, m, &d->tdev);
-	return 0;
+	process_pass_accept_req(lso, m, &d->tdev, listen_ctx);
+	return (0);
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711080659.lA86xlta000200>