Skip to content

Commit 93b7ff1

Browse files
committed
Merge branch 'master' of https://github.com/F-Stack/f-stack into master
2 parents 6faaf06 + 7dba406 commit 93b7ff1

File tree

4 files changed

+81
-2
lines changed

4 files changed

+81
-2
lines changed

doc/F-Stack_Release_Note.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
F-Stack is an open source network framework based on DPDK.
44

5+
2021.09 F-Stack v1.21.1
6+
7+
1. F-Stack lib:
8+
9+
- lo port is added 127.0.0.1 when freebsd init.
10+
11+
2. DPDK:
12+
13+
- MLX5: modify if_indextoname syscall to support F-Stack tools.
14+
515
2021.01 F-Stack v1.21
616

717
1. F-Stack lib:

dpdk/drivers/net/mlx5/mlx5_ethdev.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <stdalign.h>
2525
#include <sys/un.h>
2626
#include <time.h>
27+
#include <dlfcn.h>
2728

2829
#include <rte_atomic.h>
2930
#include <rte_ethdev_driver.h>
@@ -1640,6 +1641,7 @@ mlx5_dev_to_eswitch_info(struct rte_eth_dev *dev)
16401641
* @return
16411642
* 0 on success, a negative errno value otherwise and rte_errno is set.
16421643
*/
1644+
static int (*real_if_indextoname)(unsigned int, char *);
16431645
int
16441646
mlx5_sysfs_switch_info(unsigned int ifindex, struct mlx5_switch_info *info)
16451647
{
@@ -1659,7 +1661,16 @@ mlx5_sysfs_switch_info(unsigned int ifindex, struct mlx5_switch_info *info)
16591661
char c;
16601662
int ret;
16611663

1662-
if (!if_indextoname(ifindex, ifname)) {
1664+
// for ff tools
1665+
if (!real_if_indextoname) {
1666+
real_if_indextoname = dlsym(RTLD_NEXT, "if_indextoname");
1667+
if (!real_if_indextoname) {
1668+
rte_errno = errno;
1669+
return -rte_errno;
1670+
}
1671+
}
1672+
1673+
if (!real_if_indextoname(ifindex, ifname)) {
16631674
rte_errno = errno;
16641675
return -rte_errno;
16651676
}

freebsd/net/if_vxlan.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2481,7 +2481,7 @@ vxlan_rcv_udp_packet(struct mbuf *m, int offset, struct inpcb *inpcb,
24812481
* the behavior of the Linux implementation.
24822482
*/
24832483
if (vxh->vxlh_flags != htonl(VXLAN_HDR_FLAGS_VALID_VNI) ||
2484-
vxh->vxlh_vni & ~htonl(VXLAN_VNI_MASK))
2484+
vxh->vxlh_vni & ~VXLAN_VNI_MASK)
24852485
goto out;
24862486

24872487
vni = ntohl(vxh->vxlh_vni) >> VXLAN_HDR_VNI_SHIFT;

lib/ff_freebsd_init.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@
4747
#include "ff_api.h"
4848
#include "ff_config.h"
4949

50+
#include <sys/socketvar.h>
51+
#include <sys/sockio.h>
52+
#include <net/if.h>
53+
#include <net/if_var.h>
54+
#include <netinet/in_var.h>
55+
56+
int lo_set_defaultaddr(void);
57+
5058
int ff_freebsd_init(void);
5159

5260
extern void mutex_init(void);
@@ -64,6 +72,52 @@ extern cpuset_t all_cpus;
6472

6573
long physmem;
6674

75+
int lo_set_defaultaddr(void)
76+
{
77+
struct in_aliasreq req;
78+
char *addr="127.0.0.1";
79+
char *netmask="255.0.0.0";
80+
struct ifnet *ifp=NULL;
81+
int ret;
82+
83+
IFNET_WLOCK();
84+
TAILQ_FOREACH(ifp, &V_ifnet, if_link)
85+
if ( (ifp->if_flags & IFF_LOOPBACK) != 0 )
86+
break;
87+
IFNET_WUNLOCK();
88+
89+
if(ifp == NULL)
90+
return -1;
91+
92+
bzero(&req, sizeof req);
93+
strcpy(req.ifra_name, ifp->if_xname);
94+
95+
struct sockaddr_in sa;
96+
bzero(&sa, sizeof(sa));
97+
98+
sa.sin_len = sizeof(sa);
99+
sa.sin_family = AF_INET;
100+
101+
inet_pton(AF_INET, addr, &sa.sin_addr.s_addr);
102+
bcopy(&sa, &req.ifra_addr, sizeof(sa));
103+
104+
inet_pton(AF_INET, netmask, &sa.sin_addr.s_addr);
105+
bcopy(&sa, &req.ifra_mask, sizeof(sa));
106+
107+
//sa.sin_addr.s_addr = sc->broadcast;
108+
//bcopy(&sa, &req.ifra_broadaddr, sizeof(sa));
109+
110+
struct socket *so = NULL;
111+
ret = socreate(AF_INET, &so, SOCK_DGRAM, 0, curthread->td_ucred, curthread);
112+
if(ret != 0)
113+
return ret;
114+
115+
ret = ifioctl(so, SIOCAIFADDR, (caddr_t)&req, curthread);
116+
sofree(so);
117+
118+
return ret;
119+
}
120+
67121
int
68122
ff_freebsd_init(void)
69123
{
@@ -125,5 +179,9 @@ ff_freebsd_init(void)
125179
cur = cur->next;
126180
}
127181

182+
error = lo_set_defaultaddr();
183+
if(error != 0)
184+
printf("set loopback port default addr failed!");
185+
128186
return (0);
129187
}

0 commit comments

Comments
 (0)