Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137323623
D24388.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D24388.diff
View Options
Index: head/sys/dev/cxgbe/tom/t4_connect.c
===================================================================
--- head/sys/dev/cxgbe/tom/t4_connect.c
+++ head/sys/dev/cxgbe/tom/t4_connect.c
@@ -49,6 +49,7 @@
#include <net/if_types.h>
#include <net/if_vlan_var.h>
#include <net/route.h>
+#include <net/route/nhop.h>
#include <netinet/in.h>
#include <netinet/in_pcb.h>
#include <netinet/ip.h>
@@ -226,13 +227,13 @@
* rtalloc1, RT_UNLOCK on rt.
*/
int
-t4_connect(struct toedev *tod, struct socket *so, struct rtentry *rt,
+t4_connect(struct toedev *tod, struct socket *so, struct nhop_object *nh,
struct sockaddr *nam)
{
struct adapter *sc = tod->tod_softc;
struct toepcb *toep = NULL;
struct wrqe *wr = NULL;
- struct ifnet *rt_ifp = rt->rt_ifp;
+ struct ifnet *rt_ifp = nh->nh_ifp;
struct vi_info *vi;
int qid_atid, rc, isipv6;
struct inpcb *inp = sotoinpcb(so);
@@ -277,7 +278,7 @@
DONT_OFFLOAD_ACTIVE_OPEN(ENOMEM);
toep->l2te = t4_l2t_get(vi->pi, rt_ifp,
- rt->rt_flags & RTF_GATEWAY ? rt->rt_gateway : nam);
+ nh->nh_flags & NHF_GATEWAY ? &nh->gw_sa : nam);
if (toep->l2te == NULL)
DONT_OFFLOAD_ACTIVE_OPEN(ENOMEM);
Index: head/sys/dev/cxgbe/tom/t4_tom.h
===================================================================
--- head/sys/dev/cxgbe/tom/t4_tom.h
+++ head/sys/dev/cxgbe/tom/t4_tom.h
@@ -370,7 +370,7 @@
/* t4_connect.c */
void t4_init_connect_cpl_handlers(void);
void t4_uninit_connect_cpl_handlers(void);
-int t4_connect(struct toedev *, struct socket *, struct rtentry *,
+int t4_connect(struct toedev *, struct socket *, struct nhop_object *,
struct sockaddr *);
void act_open_failure_cleanup(struct adapter *, u_int, u_int);
Index: head/sys/netinet/tcp_offload.c
===================================================================
--- head/sys/netinet/tcp_offload.c
+++ head/sys/netinet/tcp_offload.c
@@ -41,8 +41,11 @@
#include <net/if.h>
#include <net/if_var.h>
#include <net/route.h>
+#include <net/route/nhop.h>
#include <netinet/in.h>
#include <netinet/in_pcb.h>
+#include <netinet/in_fib.h>
+#include <netinet6/in6_fib.h>
#include <netinet/tcp.h>
#include <netinet/tcp_offload.h>
#define TCPOUTFLAGS
@@ -60,7 +63,8 @@
{
struct ifnet *ifp;
struct toedev *tod;
- struct rtentry *rt;
+ struct nhop_object *nh;
+ struct epoch_tracker et;
int error = EOPNOTSUPP;
INP_WLOCK_ASSERT(sotoinpcb(so));
@@ -70,13 +74,20 @@
if (registered_toedevs == 0)
return (error);
- rt = rtalloc1(nam, 0, 0);
- if (rt)
- RT_UNLOCK(rt);
- else
+ NET_EPOCH_ENTER(et);
+ nh = NULL;
+ if (nam->sa_family == AF_INET)
+ nh = fib4_lookup(0, ((struct sockaddr_in *)nam)->sin_addr,
+ NHR_NONE, 0, 0);
+ else if (nam->sa_family == AF_INET6)
+ nh = fib6_lookup(0, &((struct sockaddr_in6 *)nam)->sin6_addr,
+ NHR_NONE, 0, 0);
+ if (nh == NULL) {
+ NET_EPOCH_EXIT(et);
return (EHOSTUNREACH);
+ }
- ifp = rt->rt_ifp;
+ ifp = nh->nh_ifp;
if (nam->sa_family == AF_INET && !(ifp->if_capenable & IFCAP_TOE4))
goto done;
@@ -85,9 +96,9 @@
tod = TOEDEV(ifp);
if (tod != NULL)
- error = tod->tod_connect(tod, so, rt, nam);
+ error = tod->tod_connect(tod, so, nh, nam);
done:
- RTFREE(rt);
+ NET_EPOCH_EXIT(et);
return (error);
}
Index: head/sys/netinet/toecore.h
===================================================================
--- head/sys/netinet/toecore.h
+++ head/sys/netinet/toecore.h
@@ -41,6 +41,7 @@
struct tcphdr;
struct in_conninfo;
struct tcp_info;
+struct nhop_object;
struct ktls_session;
struct toedev {
@@ -51,7 +52,7 @@
* Active open. If a failure occurs, it is reported back by the driver
* via toe_connect_failed.
*/
- int (*tod_connect)(struct toedev *, struct socket *, struct rtentry *,
+ int (*tod_connect)(struct toedev *, struct socket *, struct nhop_object *,
struct sockaddr *);
/* Passive open. */
@@ -95,7 +96,7 @@
/* XXX. Route has been redirected. */
void (*tod_route_redirect)(struct toedev *, struct ifnet *,
- struct rtentry *, struct rtentry *);
+ struct nhop_object *, struct nhop_object *);
/* Syncache interaction. */
void (*tod_syncache_added)(struct toedev *, void *);
Index: head/sys/netinet/toecore.c
===================================================================
--- head/sys/netinet/toecore.c
+++ head/sys/netinet/toecore.c
@@ -77,7 +77,7 @@
static int
toedev_connect(struct toedev *tod __unused, struct socket *so __unused,
- struct rtentry *rt __unused, struct sockaddr *nam __unused)
+ struct nhop_object *nh __unused, struct sockaddr *nam __unused)
{
return (ENOTSUP);
@@ -138,7 +138,7 @@
static void
toedev_route_redirect(struct toedev *tod __unused, struct ifnet *ifp __unused,
- struct rtentry *rt0 __unused, struct rtentry *rt1 __unused)
+ struct nhop_object *nh0 __unused, struct nhop_object *nh1 __unused)
{
return;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 23, 11:35 AM (8 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26012678
Default Alt Text
D24388.diff (4 KB)
Attached To
Mode
D24388: Convert TOE routing lookups to the new routing KPI.
Attached
Detach File
Event Timeline
Log In to Comment