Commit Graph

30 Commits

Author SHA1 Message Date
fengbojiang 5c144b199a Use soclose() instead of sofree() when initializing the configuration stack IP. 2024-10-17 15:19:13 +08:00
fengbojiang f95b80ee63 Support automatic configuration of vlan and vlan ip, routing and the simplest policy routing
1. Automatic configuration of multi vlan vip(IPv4 and IPv6).
	1.1 And support automatic multi default route for per vlan, via different fib num.
	1.2 IPv6 not support set multi route fib now, just use RT_DEFAULT_FIB, And you can set multi fib use tool 'ff_route'.
	1.3 If vlan_flag is true, all port's addrs/vips will not to set, just create the iface.
2. Automatic configuration of simple policy routing.
	2.1 Only supports the simplest policy routing settings, like:
		`ff_ipfw -P 0 add 100 setfib 0 ip from 125.94.59.0/24 to any out`
		`from 125.94.59.0/24` need set addr is '125.94.59.0', netmask is '255.255.255.0'
	2.2 IPv6 does not support automatic configuration of policy routing. If ipv6 policy routing is required, you still need to use ff_ipfw to manually configure it.
2024-10-17 15:01:51 +08:00
fengbojiang f4e3243725 Modify IPv4 vip addrs' broadaddr from `x.x.x.255` to `x.x.x.x`, same as
vip addr, because vips' netmask only support `255.255.255.255` now.
2024-10-15 15:18:42 +08:00
fengbojiang 1023238cee IPv6 addr and vaddr set autoconf by default. 2024-10-15 15:14:06 +08:00
fengbojiang f7da542ada fix some issue. 2022-09-02 19:41:14 +08:00
fengbojiang ff8fd2bdc7 Merge branch 'dev' 2022-09-02 16:51:22 +08:00
fengbojiang 8bff657153 fix crash while set gateway6. 2022-09-01 16:33:39 +08:00
fengbojiang 021aaded2c Support zero copy while call `ff_write`, you can enable it by modify ‘FF_ZC_SEND=1' in `lib/Makefile`.
`FF_ZC_SEND` is same as `FF_USE_PAGE_ARRAY`, it will improve performance slightly in some scenarios, need to be tested in combination with real applications.

You can enable both compilation options at the same time or separately.
2022-05-07 12:02:49 +08:00
fengbojiang e12886c02c Support zero copy while call `ff_write`, you can enable it by modify ‘FF_ZC_SEND=1' in `lib/Makefile`.
`FF_ZC_SEND` is same as `FF_USE_PAGE_ARRAY`, it will improve performance slightly in some scenarios, need to be tested in combination with real applications.

You can enable both compilation options at the same time or separately.
2022-04-15 18:00:49 +08:00
Ibtisam Tariq f4871358c3 Add support to set interface name of each port in `config.ini`. 2021-11-04 09:58:24 +05:00
fengbojiang 4093ffd426 Update LICENCE. 2021-09-18 16:05:45 +08:00
fengbojiang e7b7fb6cc9 FreeBSD: Upgrade to FreeBSD-releng-13.0 compiled, to be tested. 2021-08-31 19:00:09 +08:00
fengbojiang 4e3599d820 Support set multi virtual IPv4/IPv6 net addrs in `config.ini`, instead of use `ff_ifconfig`.
Close #421.
2021-06-16 19:26:52 +08:00
zengyi1001 d53ebd8f3c Add IPv6 net addr parameters in config
Co-authored-by: fengbojiang <fengbojiang@tencent.com>
2021-03-06 19:18:52 +08:00
freak82 0816b9cb45 Fix #568, Insufficient condition in ff_rte_frm_extcl function. 2021-03-06 19:18:52 +08:00
Jianfeng Tan 06c3e57024 fix use after free issue in mbuf free
Two kinds of mbuf are used in f-stack: freebsd mbuf and dpdk mbuf.

freebsd mbufs are metadata used in freebsd stack, and their data
pointers (m_data) point to dpdk mbuf's data (buf_addr). And they have
their own chain, like this:

  bsd_mbuf1 -> bsd_mbuf2 -> bsd_mbuf3
      \            \            \
    dpdk_mbuf1 -> dpdk_mbuf2 -> dpdk_mbuf3

Considering the map relationship,

- m_freem() is corresponding to rte_pktmbuf_free(), is to free the whole
  chain of mbufs.
- m_free() is corresponding to rte_pktmbuf_free_seg(), is to free the
  specified mbuf segment.

The current implementation in f-stack uses rte_pktmbuf_free() for
m_free(). This leads to mbufs, which are still in use, be freed
unexpectedly. For example, if the bsd_mbuf1 is trimed into zero length,
bsd will invoke m_free() to free the specified segment, however, the
whole mbuf chain is freed by calling rte_pktmbuf_free().

  #0 rte_pktmbuf_free (m=0x22006fb480)
  #1 in ff_dpdk_pktmbuf_free (m=0x22006fb480)
  #2 in ff_mbuf_ext_free (m=0x7ffff7f82800, arg1=0x22006fb480, arg2=0x0)
  #3 in mb_free_ext (m=0x7ffff7f82800)
  #4 in m_free (m=0x7ffff7f82800)
  #5 in sbcompress (sb=, m=0x7ffff7f82800, n=)
  #6 in sbappendstream_locked (sb=, m=0x7ffff7f82800, flags=0)

The fix is straightforward. Use the correct API for segment free.

Reported-by: Yong-Hao Zou <yonghaoz1994@gmail.com>
Signed-off-by: Jianfeng Tan <henry.tjf@antgroup.com>
2021-03-06 19:18:52 +08:00
zengyi1001 0f2a196b68 Add IPv6 net addr parameters in config
Co-authored-by: fengbojiang <fengbojiang@tencent.com>
2021-03-06 19:04:46 +08:00
freak82 7817f2be74 Fix #568, Insufficient condition in ff_rte_frm_extcl function. 2021-03-06 19:04:46 +08:00
Jianfeng Tan 84456118c7 fix use after free issue in mbuf free
Two kinds of mbuf are used in f-stack: freebsd mbuf and dpdk mbuf.

freebsd mbufs are metadata used in freebsd stack, and their data
pointers (m_data) point to dpdk mbuf's data (buf_addr). And they have
their own chain, like this:

  bsd_mbuf1 -> bsd_mbuf2 -> bsd_mbuf3
      \            \            \
    dpdk_mbuf1 -> dpdk_mbuf2 -> dpdk_mbuf3

Considering the map relationship,

- m_freem() is corresponding to rte_pktmbuf_free(), is to free the whole
  chain of mbufs.
- m_free() is corresponding to rte_pktmbuf_free_seg(), is to free the
  specified mbuf segment.

The current implementation in f-stack uses rte_pktmbuf_free() for
m_free(). This leads to mbufs, which are still in use, be freed
unexpectedly. For example, if the bsd_mbuf1 is trimed into zero length,
bsd will invoke m_free() to free the specified segment, however, the
whole mbuf chain is freed by calling rte_pktmbuf_free().

  #0 rte_pktmbuf_free (m=0x22006fb480)
  #1 in ff_dpdk_pktmbuf_free (m=0x22006fb480)
  #2 in ff_mbuf_ext_free (m=0x7ffff7f82800, arg1=0x22006fb480, arg2=0x0)
  #3 in mb_free_ext (m=0x7ffff7f82800)
  #4 in m_free (m=0x7ffff7f82800)
  #5 in sbcompress (sb=, m=0x7ffff7f82800, n=)
  #6 in sbappendstream_locked (sb=, m=0x7ffff7f82800, flags=0)

The fix is straightforward. Use the correct API for segment free.

Reported-by: Yong-Hao Zou <yonghaoz1994@gmail.com>
Signed-off-by: Jianfeng Tan <henry.tjf@antgroup.com>
2021-03-06 19:04:46 +08:00
fengbojiang(姜凤波) c6dae7f8fe Merge branch 'master' into dev
vlan bug fix
2019-07-29 15:08:46 +08:00
fengbojiang(姜凤波) faeec574ca Merge branch 'master' into dev
vlan bug fix
2019-07-29 15:08:46 +08:00
HongBo Long 2a7631a6bc set freebsd mbuf vlan information when the vlan_strip is enable && get ether_type error when the vlan_strip is disabled 2019-07-09 20:02:42 +08:00
HongBo Long 49056e3ae7 set freebsd mbuf vlan information when the vlan_strip is enable && get ether_type error when the vlan_strip is disabled 2019-07-09 20:02:42 +08:00
10077240 04cef02d60 use 4 spaces instead tab 2019-04-01 15:42:01 +08:00
10077240 5bf882b459 modify according to MR.Wang 2019-04-01 14:54:36 +08:00
10077240 ef5ab85936 not use mcopy when transmit from bsd to dpdk 2019-03-29 10:42:02 +08:00
yanya b0c07b2440 F-stack:fix bug, if ff_veth_softc malloc faild, memory should no be read. 2018-06-11 10:53:38 +08:00
logwang a9e7dcf4da Fix ff_rss_check function bug.
1.Close #22.
2.Configure the HW indirection table when initializing port.
3.Use several LSBs of the rss hash result according to reta_size when
calculating queue index.
2017-08-28 17:12:07 +08:00
logwang 213fa7b358 Support RX/TX offload according to HW's capability
RX: VLAN strip, CRC strip, IP/TCP/UDP checksum.
TX: IP/TCP/UDP checksum, TSO.

Note that TSO has a problem: when enable TSO,
F-Stack is much slower(Temporarily not resolved).
So TSO is disabled by default.
Edit config.ini to enable it.
2017-05-06 21:52:25 +08:00
logwang a9643ea85c init 2017-04-21 18:43:26 +08:00