Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Oct 2007 03:03:27 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 128270 for review
Message-ID:  <200710290303.l9T33Rw8089400@repoman.freebsd.org>

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

Change 128270 by kmacy@kmacy:storage:toestack on 2007/10/29 03:03:23

	- fix route lookup 
	- make ofld_connect return 0 on success and error code on failure

Affected files ...

.. //depot/projects/toestack/sys/netinet/tcp_ofld.c#3 edit
.. //depot/projects/toestack/sys/netinet/tcp_ofld.h#4 edit

Differences ...

==== //depot/projects/toestack/sys/netinet/tcp_ofld.c#3 (text+ko) ====

@@ -31,28 +31,38 @@
 	struct inpcb *inp = sotoinpcb(so);
 	struct ifnet *ifp;
 	struct toedev *tdev;
-	
+	int err;
+
+	if (inp->inp_route.ro_rt == NULL) {
+		inp->inp_route.ro_rt = rtalloc2(nam, 1, 0);
+		if (inp->inp_route.ro_rt)
+			memcpy(&inp->inp_route.ro_dst, nam, sizeof(struct sockaddr));
+	}
+
 	if (inp->inp_route.ro_rt == NULL) {
-		struct sockaddr_in *dst =  (struct sockaddr_in *)&inp->inp_route.ro_dst;
+		printf("no route found for offload\n");
 		
-		bzero(dst, sizeof(*dst));
-		dst->sin_family = AF_INET;
-		dst->sin_len = sizeof(*dst);
-		dst->sin_addr.s_addr = *(in_addr_t *)&nam->sa_data;
-		
-		rtalloc_ign(&inp->inp_route, 0);
+		return (EHOSTUNREACH);
 	}
-
-	if (inp->inp_route.ro_rt == NULL)
-		return (0);
+	
 	ifp = inp->inp_route.ro_rt->rt_ifp;
 	tdev = TOEDEV(ifp);
-
-	if ((tdev == NULL) || (tdev->can_offload(tdev, so) == 0))
-		return (0);
-	if (tdev->connect(tdev, so, ifp))
-		return (1);
-
+	if (tdev == NULL) {
+		printf("tdev not set for ifp=%p name=%s\n", ifp, if_name(ifp));
+		return (EINVAL);
+	}
+	
+	if ((tdev == NULL) || (tdev->can_offload(tdev, so) == 0)) {
+		printf("can't offload\n");
+		
+		return (EINVAL);
+	}
+	
+	if ((err = tdev->connect(tdev, so, ifp)))
+		return (err);
+		
+	printf("connected!!!\n");
+			    
 	return (0);
 }
 

==== //depot/projects/toestack/sys/netinet/tcp_ofld.h#4 (text+ko) ====

@@ -23,7 +23,7 @@
 	int error;
 	struct tcpcb *tp = sototcpcb(so);
 	
-	if (!SO_OFFLOADABLE(so) || (error = ofld_connect(so, nam)) == 0)
+	if (!SO_OFFLOADABLE(so) || (error = ofld_connect(so, nam)) != 0)
 		error = tcp_output(tp);
 	else	
 		printf("connection offloaded\n");



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