Add a hook to allow the toedev handling an offloaded connection to
provide accurate TCP_INFO. Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D14816
This commit is contained in:
parent
9f5b999aca
commit
a64564109a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=331901
@ -167,6 +167,17 @@ tcp_offload_ctloutput(struct tcpcb *tp, int sopt_dir, int sopt_name)
|
|||||||
tod->tod_ctloutput(tod, tp, sopt_dir, sopt_name);
|
tod->tod_ctloutput(tod, tp, sopt_dir, sopt_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tcp_offload_tcp_info(struct tcpcb *tp, struct tcp_info *ti)
|
||||||
|
{
|
||||||
|
struct toedev *tod = tp->tod;
|
||||||
|
|
||||||
|
KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp));
|
||||||
|
INP_WLOCK_ASSERT(tp->t_inpcb);
|
||||||
|
|
||||||
|
tod->tod_tcp_info(tod, tp, ti);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tcp_offload_detach(struct tcpcb *tp)
|
tcp_offload_detach(struct tcpcb *tp)
|
||||||
{
|
{
|
||||||
|
@ -45,6 +45,7 @@ void tcp_offload_input(struct tcpcb *, struct mbuf *);
|
|||||||
int tcp_offload_output(struct tcpcb *);
|
int tcp_offload_output(struct tcpcb *);
|
||||||
void tcp_offload_rcvd(struct tcpcb *);
|
void tcp_offload_rcvd(struct tcpcb *);
|
||||||
void tcp_offload_ctloutput(struct tcpcb *, int, int);
|
void tcp_offload_ctloutput(struct tcpcb *, int, int);
|
||||||
|
void tcp_offload_tcp_info(struct tcpcb *, struct tcp_info *);
|
||||||
void tcp_offload_detach(struct tcpcb *);
|
void tcp_offload_detach(struct tcpcb *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1393,11 +1393,15 @@ tcp_fill_info(struct tcpcb *tp, struct tcp_info *ti)
|
|||||||
ti->tcpi_snd_nxt = tp->snd_nxt;
|
ti->tcpi_snd_nxt = tp->snd_nxt;
|
||||||
ti->tcpi_snd_mss = tp->t_maxseg;
|
ti->tcpi_snd_mss = tp->t_maxseg;
|
||||||
ti->tcpi_rcv_mss = tp->t_maxseg;
|
ti->tcpi_rcv_mss = tp->t_maxseg;
|
||||||
if (tp->t_flags & TF_TOE)
|
|
||||||
ti->tcpi_options |= TCPI_OPT_TOE;
|
|
||||||
ti->tcpi_snd_rexmitpack = tp->t_sndrexmitpack;
|
ti->tcpi_snd_rexmitpack = tp->t_sndrexmitpack;
|
||||||
ti->tcpi_rcv_ooopack = tp->t_rcvoopack;
|
ti->tcpi_rcv_ooopack = tp->t_rcvoopack;
|
||||||
ti->tcpi_snd_zerowin = tp->t_sndzerowin;
|
ti->tcpi_snd_zerowin = tp->t_sndzerowin;
|
||||||
|
#ifdef TCP_OFFLOAD
|
||||||
|
if (tp->t_flags & TF_TOE) {
|
||||||
|
ti->tcpi_options |= TCPI_OPT_TOE;
|
||||||
|
tcp_offload_tcp_info(tp, ti);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -182,6 +182,14 @@ toedev_ctloutput(struct toedev *tod __unused, struct tcpcb *tp __unused,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
toedev_tcp_info(struct toedev *tod __unused, struct tcpcb *tp __unused,
|
||||||
|
struct tcp_info *ti __unused)
|
||||||
|
{
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Inform one or more TOE devices about a listening socket.
|
* Inform one or more TOE devices about a listening socket.
|
||||||
*/
|
*/
|
||||||
@ -271,6 +279,7 @@ init_toedev(struct toedev *tod)
|
|||||||
tod->tod_syncache_respond = toedev_syncache_respond;
|
tod->tod_syncache_respond = toedev_syncache_respond;
|
||||||
tod->tod_offload_socket = toedev_offload_socket;
|
tod->tod_offload_socket = toedev_offload_socket;
|
||||||
tod->tod_ctloutput = toedev_ctloutput;
|
tod->tod_ctloutput = toedev_ctloutput;
|
||||||
|
tod->tod_tcp_info = toedev_tcp_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
struct tcpopt;
|
struct tcpopt;
|
||||||
struct tcphdr;
|
struct tcphdr;
|
||||||
struct in_conninfo;
|
struct in_conninfo;
|
||||||
|
struct tcp_info;
|
||||||
|
|
||||||
struct toedev {
|
struct toedev {
|
||||||
TAILQ_ENTRY(toedev) link; /* glue for toedev_list */
|
TAILQ_ENTRY(toedev) link; /* glue for toedev_list */
|
||||||
@ -101,6 +102,10 @@ struct toedev {
|
|||||||
|
|
||||||
/* TCP socket option */
|
/* TCP socket option */
|
||||||
void (*tod_ctloutput)(struct toedev *, struct tcpcb *, int, int);
|
void (*tod_ctloutput)(struct toedev *, struct tcpcb *, int, int);
|
||||||
|
|
||||||
|
/* Update software state */
|
||||||
|
void (*tod_tcp_info)(struct toedev *, struct tcpcb *,
|
||||||
|
struct tcp_info *);
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <sys/eventhandler.h>
|
#include <sys/eventhandler.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user