Skip to main content

Network Management

This section provides an overview of the essential configuration options required by Fusion File Share server to handle client requests.

Binding to interface(s)

You can control which interfaces Fusion File Share server will bind to, in order to serve client requests using the global configuration setting, ‘listen’. This parameter can be specified multiple times to start listening on multiple addresses.

The format is:

listen = interface,address,family,port,proto[,params]

Where:

interface – Interface name on which to listen to. It can be set to ANY to listen on all interfaces.

address – Refers to IPv4 or IPv6 address on which to listen. The format of the value depends on ‘family’. If you do not want to specify a particular address use ‘0.0.0.0’ for IPv4 family and ‘::’ for IPv6 address family.

note

For some values of ’proto’, Fusion server always listens to address ‘0.0.0.0’ regardless of the value passed to the address parameter, the filtering of received packets by the address passed to the address parameter is performed by the internal logic of the application. These protocols are: NBNS, NBDS, LLMNR, and WSD.

family – Network address family and transport type (IPv4 or IPv6). To listen to both IPv4 and IPv6, specify the ‘listen’ parameter twice, once for IPv4 and once for IPv6.

port – TCP/UDP port number to listen to.

proto – Transport protocol to use on the connections opened over specified ‘port’/‘address’/‘interface’.

Possible values for proto are:

  • DIRECT_TCP - use Direct TCP transport (see [MS-SMB2] 2.1)
  • NBSS - use NetBIOS Session Service over TCP (see [RFC1001], [RFC1002])
  • NBNS - use NetBIOS Name Service over UDP
  • NBDS - use NetBIOS Datagram Service over UDP
  • The default value is ‘DIRECT_TCP’
  • WSD - use Web Service Discovery
  • LLMNR - use Link-Local Multicast Name Resolution
note

You may find that the Fusion server listens on the ports of all the protocols listed above regardless of the settings of the listen parameter. However, to activate the required protocols, the entries below must be added to the configuration file.

listen = ANY,0.0.0.0,IPv4,445
listen = ANY,::,IPv6,445

params – Optional comma-separated list of parameters.

Following are the supported parameters for params:

  • RSS = <Number of RSS queues>

The modern NICs have multiple queues that are meant for distributing the processing of incoming packets among CPUs. This technique is called RSS (Receive Side-Scaling). Windows client can leverage RSS capability of cards by opening multiple channels or network connections over a single NIC. By default, if this value is not configured, TSMB will automatically detect the RSS capability of a NIC. But it’s possible to override this behavior by user-configured values. A value of ’0’ disables RSS.

This option accepts values in range [0, UINT32_MAX - 1].

  • max_read_write_size = <Maximum size of RDMA Read/Write request>

Valid for RDMA transport only. This is the maximum number of bytes that the server will transfer via RDMA Read or RDMA Write request (MaxReadWriteSize). Note that the actual transfer size is chosen by the client on buffer allocation and it should choose smaller of an implementation defined value and this one. Default value is 8388608 (8 MiB), which is used in modern Windows implementations.

This option accepts values in range [0, UINT32_MAX - 1].

  • server = <Server Name>

SMB shares can be scoped meaning they are visible only when a client accesses the particular server. It is possible to associate a transport with some server name that later can be used to tag share (see Scoped Share) allowing access to the share only when the client connected through this or any other transport with the same server name.

Example:

listen = eth0,0.0.0.0,IPv4,445,DIRECT_TCP
listen = eth0,0.0.0.0,IPv4,445,DIRECT_TCP,RSS=2
listen = ANY,::,IPv6,445,DIRECT_TCP
listen = ANY,::,IPv6,445,DIRECT_TCP,RSS=0
listen = ANY,::,IPv4,139,NBSS

To listen on all interfaces and addresses use:

listen = ANY,0.0.0.0,IPv4,445,DIRECT_TCP
listen = ANY,::,IPv6,445,DIRECT_TCP
listen = ANY,0.0.0.0,IPv4,139,NBSS

To enable Windows 10 Web Service Discovery and LLMNR add the following line:

listen = ANY,0.0.0.0,IPv4,3702,WSD
listen = ANY,0.0.0.0,IPv4,5355,LLMNR
note

WSD and LLMNR protocols use multicast groups and cannot be activated on the loopback interface or ‘127.0.0.1’ address, you can control this by command ‘ip m’. If WSD and LLMNR protocols enabled correctly you can see appropriate multicast group addresses in the output.

# ip m
1: lo
inet 224.0.0.1
inet6 ff02::1
inet6 ff01::1
2: ens3
link 01:00:5e:00:00:01
link 01:00:5e:7f:ff:fa
link 01:00:5e:00:00:fc
inet 224.0.0.252 <-- LLMNR group
inet 239.255.255.250 <-- WSD group
inet 224.0.0.1
inet6 ff02::1
inet6 ff01::1

To listen only to a specific interface on IPv4:

listen = eth0,0.0.0.0,IPv4,445

Multichannel

Fusion File Share server supports SMB multichannel. SMB Multichannel channel provides better throughput (by allowing client and server to transmit data over multiple connections over a single high-speed Network Interface Card (NIC) or multiple NICs) and network fault-tolerance (by allowing clients to continue transmitting data over one of the many existing connections despite the loss of connection(s)).

SMB mutlichannel has the following requirements:

  1. Multiple NICs on the client, or server or both. This allows the client to establish connections over each of the NICs.
  2. One or more NICs that supports Receive Side Scaling (RSS) on both the client and server. This allows client to establish multiple connections (channels) over a single RSS-capable NIC.
  3. One or more NICs that supports RDMA.

Enabling RSS unconditionally (even for a network interface that does not have RSS) may give better performance.

To disable RSS:

listen = ANY,0.0.0.0,IPv4,445,DIRECT_TCP,RSS=0

To enable RSS:

listen = ANY,0.0.0.0,IPv4,445,DIRECT_TCP,RSS=2

Or bigger value.

Network Interface Information

A SMB client that is multichannel-aware will query the Fusion File Share server to retrieve information about the interfaces and its capabilities. By default, the Fusion File Share server will advertise those interface(s) the server is bound to using ‘listen’ (see Binding to Interfaces).

However, in some network configuration, the Fusion File Share server could be running in a private namespace, and may be different from the host’s default network namespace that is public. In such scenarios, NAT is primarily used for mapping public to private addresses and vice versa. So generating a response based on network interface list in the private namespace (visible to Fusion File Share) would result in a response with IP address information that the client cannot connect.

This configuration option allows to override the dynamically generated response with an explicitly configured network address information that the server can advertise to the clients. A sample configuration looks like below:

network_interface_info = [{addr=10.1.1.123,rdma,rss}, {addr=192.168.1.12}]

As seen above each network interface address information is a array of collection of parameters, where each collection is separated by a comma and each parameter within a collection is further separated by comma.

The supported parameters for each address information are:

  • ‘addr’ - A mandatory parameter to configure IP address.
  • ‘speed’ - An optional parameter configured in bits per second. Default: 1000000000.
  • ‘index’ - An optional parameter, that represents the index of an interface as may be set by the operating-system. An index should be kept unique per interface and not per-address. So one or more addresses may have the same index as long as they belong to the same interface. Default: 4294967295
  • ‘rdma’ - Whether this interface supports RDMA. Default: <unset>
  • ‘rss’ - Whether this interface supports Receive Side Steering. Default: <unset>

Example:

network_interface_info = [{addr=1.1.1.1,speed=10,rss}, {addr=3.2.1.4}]
network_interface_info = {addr=2.2.2.2,index=10}, {addr=1.1.1.1, speed=100000000000,rss,rdma}