Page MenuHomeFreeBSD

D24388.diff
No OneTemporary

D24388.diff

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

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)

Event Timeline