|
@@ -57,6 +57,7 @@
|
|
|
#include <net/addrconf.h>
|
|
|
#include <net/ip6_route.h>
|
|
|
#include <net/ip_fib.h>
|
|
|
+#include <net/secure_seq.h>
|
|
|
#include <net/tcp.h>
|
|
|
#include <asm/checksum.h>
|
|
|
|
|
@@ -2164,7 +2165,6 @@ static struct i40iw_cm_node *i40iw_make_cm_node(
|
|
|
struct i40iw_cm_listener *listener)
|
|
|
{
|
|
|
struct i40iw_cm_node *cm_node;
|
|
|
- struct timespec ts;
|
|
|
int oldarpindex;
|
|
|
int arpindex;
|
|
|
struct net_device *netdev = iwdev->netdev;
|
|
@@ -2214,10 +2214,26 @@ static struct i40iw_cm_node *i40iw_make_cm_node(
|
|
|
cm_node->tcp_cntxt.rcv_wscale = I40IW_CM_DEFAULT_RCV_WND_SCALE;
|
|
|
cm_node->tcp_cntxt.rcv_wnd =
|
|
|
I40IW_CM_DEFAULT_RCV_WND_SCALED >> I40IW_CM_DEFAULT_RCV_WND_SCALE;
|
|
|
- ts = current_kernel_time();
|
|
|
- cm_node->tcp_cntxt.loc_seq_num = ts.tv_nsec;
|
|
|
- cm_node->tcp_cntxt.mss = (cm_node->ipv4) ? (iwdev->vsi.mtu - I40IW_MTU_TO_MSS_IPV4) :
|
|
|
- (iwdev->vsi.mtu - I40IW_MTU_TO_MSS_IPV6);
|
|
|
+ if (cm_node->ipv4) {
|
|
|
+ cm_node->tcp_cntxt.loc_seq_num = secure_tcp_seq(htonl(cm_node->loc_addr[0]),
|
|
|
+ htonl(cm_node->rem_addr[0]),
|
|
|
+ htons(cm_node->loc_port),
|
|
|
+ htons(cm_node->rem_port));
|
|
|
+ cm_node->tcp_cntxt.mss = iwdev->vsi.mtu - I40IW_MTU_TO_MSS_IPV4;
|
|
|
+ } else if (IS_ENABLED(CONFIG_IPV6)) {
|
|
|
+ __be32 loc[4] = {
|
|
|
+ htonl(cm_node->loc_addr[0]), htonl(cm_node->loc_addr[1]),
|
|
|
+ htonl(cm_node->loc_addr[2]), htonl(cm_node->loc_addr[3])
|
|
|
+ };
|
|
|
+ __be32 rem[4] = {
|
|
|
+ htonl(cm_node->rem_addr[0]), htonl(cm_node->rem_addr[1]),
|
|
|
+ htonl(cm_node->rem_addr[2]), htonl(cm_node->rem_addr[3])
|
|
|
+ };
|
|
|
+ cm_node->tcp_cntxt.loc_seq_num = secure_tcpv6_seq(loc, rem,
|
|
|
+ htons(cm_node->loc_port),
|
|
|
+ htons(cm_node->rem_port));
|
|
|
+ cm_node->tcp_cntxt.mss = iwdev->vsi.mtu - I40IW_MTU_TO_MSS_IPV6;
|
|
|
+ }
|
|
|
|
|
|
cm_node->iwdev = iwdev;
|
|
|
cm_node->dev = &iwdev->sc_dev;
|