PERFORCE change 128270 for review
Kip Macy
kmacy at FreeBSD.org
Sun Oct 28 20:03:34 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=128270
Change 128270 by kmacy at 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");
More information about the p4-projects
mailing list