You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Remove DECnet support from kernel
commit 1202cdd665 upstream.
DECnet is an obsolete network protocol that receives more attention
from kernel janitors than users. It belongs in computer protocol
history museum not in Linux kernel.
It has been "Orphaned" in kernel since 2010. The iproute2 support
for DECnet was dropped in 5.0 release. The documentation link on
Sourceforge says it is abandoned there as well.
Leave the UAPI alone to keep userspace programs compiling.
This means that there is still an empty neighbour table
for AF_DECNET.
The table of /proc/sys/net entries was updated to match
current directories and reformatted to be alphabetical.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: David Ahern <dsahern@kernel.org>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e9d384983f
commit
1c004b379b
@@ -866,10 +866,6 @@
|
||||
|
||||
debugpat [X86] Enable PAT debugging
|
||||
|
||||
decnet.addr= [HW,NET]
|
||||
Format: <area>[,<node>]
|
||||
See also Documentation/networking/decnet.rst.
|
||||
|
||||
default_hugepagesz=
|
||||
[HW] The size of the default HugeTLB page. This is
|
||||
the size represented by the legacy /proc/ hugepages
|
||||
|
||||
@@ -34,13 +34,14 @@ Table : Subdirectories in /proc/sys/net
|
||||
========= =================== = ========== ==================
|
||||
Directory Content Directory Content
|
||||
========= =================== = ========== ==================
|
||||
core General parameter appletalk Appletalk protocol
|
||||
unix Unix domain sockets netrom NET/ROM
|
||||
802 E802 protocol ax25 AX25
|
||||
ethernet Ethernet protocol rose X.25 PLP layer
|
||||
ipv4 IP version 4 x25 X.25 protocol
|
||||
bridge Bridging decnet DEC net
|
||||
ipv6 IP version 6 tipc TIPC
|
||||
802 E802 protocol mptcp Multipath TCP
|
||||
appletalk Appletalk protocol netfilter Network Filter
|
||||
ax25 AX25 netrom NET/ROM
|
||||
bridge Bridging rose X.25 PLP layer
|
||||
core General parameter tipc TIPC
|
||||
ethernet Ethernet protocol unix Unix domain sockets
|
||||
ipv4 IP version 4 x25 X.25 protocol
|
||||
ipv6 IP version 6
|
||||
========= =================== = ========== ==================
|
||||
|
||||
1. /proc/sys/net/core - Network core options
|
||||
|
||||
@@ -1,243 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=========================================
|
||||
Linux DECnet Networking Layer Information
|
||||
=========================================
|
||||
|
||||
1. Other documentation....
|
||||
==========================
|
||||
|
||||
- Project Home Pages
|
||||
- http://www.chygwyn.com/ - Kernel info
|
||||
- http://linux-decnet.sourceforge.net/ - Userland tools
|
||||
- http://www.sourceforge.net/projects/linux-decnet/ - Status page
|
||||
|
||||
2. Configuring the kernel
|
||||
=========================
|
||||
|
||||
Be sure to turn on the following options:
|
||||
|
||||
- CONFIG_DECNET (obviously)
|
||||
- CONFIG_PROC_FS (to see what's going on)
|
||||
- CONFIG_SYSCTL (for easy configuration)
|
||||
|
||||
if you want to try out router support (not properly debugged yet)
|
||||
you'll need the following options as well...
|
||||
|
||||
- CONFIG_DECNET_ROUTER (to be able to add/delete routes)
|
||||
- CONFIG_NETFILTER (will be required for the DECnet routing daemon)
|
||||
|
||||
Don't turn on SIOCGIFCONF support for DECnet unless you are really sure
|
||||
that you need it, in general you won't and it can cause ifconfig to
|
||||
malfunction.
|
||||
|
||||
Run time configuration has changed slightly from the 2.4 system. If you
|
||||
want to configure an endnode, then the simplified procedure is as follows:
|
||||
|
||||
- Set the MAC address on your ethernet card before starting _any_ other
|
||||
network protocols.
|
||||
|
||||
As soon as your network card is brought into the UP state, DECnet should
|
||||
start working. If you need something more complicated or are unsure how
|
||||
to set the MAC address, see the next section. Also all configurations which
|
||||
worked with 2.4 will work under 2.5 with no change.
|
||||
|
||||
3. Command line options
|
||||
=======================
|
||||
|
||||
You can set a DECnet address on the kernel command line for compatibility
|
||||
with the 2.4 configuration procedure, but in general it's not needed any more.
|
||||
If you do st a DECnet address on the command line, it has only one purpose
|
||||
which is that its added to the addresses on the loopback device.
|
||||
|
||||
With 2.4 kernels, DECnet would only recognise addresses as local if they
|
||||
were added to the loopback device. In 2.5, any local interface address
|
||||
can be used to loop back to the local machine. Of course this does not
|
||||
prevent you adding further addresses to the loopback device if you
|
||||
want to.
|
||||
|
||||
N.B. Since the address list of an interface determines the addresses for
|
||||
which "hello" messages are sent, if you don't set an address on the loopback
|
||||
interface then you won't see any entries in /proc/net/neigh for the local
|
||||
host until such time as you start a connection. This doesn't affect the
|
||||
operation of the local communications in any other way though.
|
||||
|
||||
The kernel command line takes options looking like the following::
|
||||
|
||||
decnet.addr=1,2
|
||||
|
||||
the two numbers are the node address 1,2 = 1.2 For 2.2.xx kernels
|
||||
and early 2.3.xx kernels, you must use a comma when specifying the
|
||||
DECnet address like this. For more recent 2.3.xx kernels, you may
|
||||
use almost any character except space, although a `.` would be the most
|
||||
obvious choice :-)
|
||||
|
||||
There used to be a third number specifying the node type. This option
|
||||
has gone away in favour of a per interface node type. This is now set
|
||||
using /proc/sys/net/decnet/conf/<dev>/forwarding. This file can be
|
||||
set with a single digit, 0=EndNode, 1=L1 Router and 2=L2 Router.
|
||||
|
||||
There are also equivalent options for modules. The node address can
|
||||
also be set through the /proc/sys/net/decnet/ files, as can other system
|
||||
parameters.
|
||||
|
||||
Currently the only supported devices are ethernet and ip_gre. The
|
||||
ethernet address of your ethernet card has to be set according to the DECnet
|
||||
address of the node in order for it to be autoconfigured (and then appear in
|
||||
/proc/net/decnet_dev). There is a utility available at the above
|
||||
FTP sites called dn2ethaddr which can compute the correct ethernet
|
||||
address to use. The address can be set by ifconfig either before or
|
||||
at the time the device is brought up. If you are using RedHat you can
|
||||
add the line::
|
||||
|
||||
MACADDR=AA:00:04:00:03:04
|
||||
|
||||
or something similar, to /etc/sysconfig/network-scripts/ifcfg-eth0 or
|
||||
wherever your network card's configuration lives. Setting the MAC address
|
||||
of your ethernet card to an address starting with "hi-ord" will cause a
|
||||
DECnet address which matches to be added to the interface (which you can
|
||||
verify with iproute2).
|
||||
|
||||
The default device for routing can be set through the /proc filesystem
|
||||
by setting /proc/sys/net/decnet/default_device to the
|
||||
device you want DECnet to route packets out of when no specific route
|
||||
is available. Usually this will be eth0, for example::
|
||||
|
||||
echo -n "eth0" >/proc/sys/net/decnet/default_device
|
||||
|
||||
If you don't set the default device, then it will default to the first
|
||||
ethernet card which has been autoconfigured as described above. You can
|
||||
confirm that by looking in the default_device file of course.
|
||||
|
||||
There is a list of what the other files under /proc/sys/net/decnet/ do
|
||||
on the kernel patch web site (shown above).
|
||||
|
||||
4. Run time kernel configuration
|
||||
================================
|
||||
|
||||
|
||||
This is either done through the sysctl/proc interface (see the kernel web
|
||||
pages for details on what the various options do) or through the iproute2
|
||||
package in the same way as IPv4/6 configuration is performed.
|
||||
|
||||
Documentation for iproute2 is included with the package, although there is
|
||||
as yet no specific section on DECnet, most of the features apply to both
|
||||
IP and DECnet, albeit with DECnet addresses instead of IP addresses and
|
||||
a reduced functionality.
|
||||
|
||||
If you want to configure a DECnet router you'll need the iproute2 package
|
||||
since its the _only_ way to add and delete routes currently. Eventually
|
||||
there will be a routing daemon to send and receive routing messages for
|
||||
each interface and update the kernel routing tables accordingly. The
|
||||
routing daemon will use netfilter to listen to routing packets, and
|
||||
rtnetlink to update the kernels routing tables.
|
||||
|
||||
The DECnet raw socket layer has been removed since it was there purely
|
||||
for use by the routing daemon which will now use netfilter (a much cleaner
|
||||
and more generic solution) instead.
|
||||
|
||||
5. How can I tell if its working?
|
||||
=================================
|
||||
|
||||
Here is a quick guide of what to look for in order to know if your DECnet
|
||||
kernel subsystem is working.
|
||||
|
||||
- Is the node address set (see /proc/sys/net/decnet/node_address)
|
||||
- Is the node of the correct type
|
||||
(see /proc/sys/net/decnet/conf/<dev>/forwarding)
|
||||
- Is the Ethernet MAC address of each Ethernet card set to match
|
||||
the DECnet address. If in doubt use the dn2ethaddr utility available
|
||||
at the ftp archive.
|
||||
- If the previous two steps are satisfied, and the Ethernet card is up,
|
||||
you should find that it is listed in /proc/net/decnet_dev and also
|
||||
that it appears as a directory in /proc/sys/net/decnet/conf/. The
|
||||
loopback device (lo) should also appear and is required to communicate
|
||||
within a node.
|
||||
- If you have any DECnet routers on your network, they should appear
|
||||
in /proc/net/decnet_neigh, otherwise this file will only contain the
|
||||
entry for the node itself (if it doesn't check to see if lo is up).
|
||||
- If you want to send to any node which is not listed in the
|
||||
/proc/net/decnet_neigh file, you'll need to set the default device
|
||||
to point to an Ethernet card with connection to a router. This is
|
||||
again done with the /proc/sys/net/decnet/default_device file.
|
||||
- Try starting a simple server and client, like the dnping/dnmirror
|
||||
over the loopback interface. With luck they should communicate.
|
||||
For this step and those after, you'll need the DECnet library
|
||||
which can be obtained from the above ftp sites as well as the
|
||||
actual utilities themselves.
|
||||
- If this seems to work, then try talking to a node on your local
|
||||
network, and see if you can obtain the same results.
|
||||
- At this point you are on your own... :-)
|
||||
|
||||
6. How to send a bug report
|
||||
===========================
|
||||
|
||||
If you've found a bug and want to report it, then there are several things
|
||||
you can do to help me work out exactly what it is that is wrong. Useful
|
||||
information (_most_ of which _is_ _essential_) includes:
|
||||
|
||||
- What kernel version are you running ?
|
||||
- What version of the patch are you running ?
|
||||
- How far though the above set of tests can you get ?
|
||||
- What is in the /proc/decnet* files and /proc/sys/net/decnet/* files ?
|
||||
- Which services are you running ?
|
||||
- Which client caused the problem ?
|
||||
- How much data was being transferred ?
|
||||
- Was the network congested ?
|
||||
- How can the problem be reproduced ?
|
||||
- Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of
|
||||
tcpdump don't understand how to dump DECnet properly, so including
|
||||
the hex listing of the packet contents is _essential_, usually the -x flag.
|
||||
You may also need to increase the length grabbed with the -s flag. The
|
||||
-e flag also provides very useful information (ethernet MAC addresses))
|
||||
|
||||
7. MAC FAQ
|
||||
==========
|
||||
|
||||
A quick FAQ on ethernet MAC addresses to explain how Linux and DECnet
|
||||
interact and how to get the best performance from your hardware.
|
||||
|
||||
Ethernet cards are designed to normally only pass received network frames
|
||||
to a host computer when they are addressed to it, or to the broadcast address.
|
||||
|
||||
Linux has an interface which allows the setting of extra addresses for
|
||||
an ethernet card to listen to. If the ethernet card supports it, the
|
||||
filtering operation will be done in hardware, if not the extra unwanted packets
|
||||
received will be discarded by the host computer. In the latter case,
|
||||
significant processor time and bus bandwidth can be used up on a busy
|
||||
network (see the NAPI documentation for a longer explanation of these
|
||||
effects).
|
||||
|
||||
DECnet makes use of this interface to allow running DECnet on an ethernet
|
||||
card which has already been configured using TCP/IP (presumably using the
|
||||
built in MAC address of the card, as usual) and/or to allow multiple DECnet
|
||||
addresses on each physical interface. If you do this, be aware that if your
|
||||
ethernet card doesn't support perfect hashing in its MAC address filter
|
||||
then your computer will be doing more work than required. Some cards
|
||||
will simply set themselves into promiscuous mode in order to receive
|
||||
packets from the DECnet specified addresses. So if you have one of these
|
||||
cards its better to set the MAC address of the card as described above
|
||||
to gain the best efficiency. Better still is to use a card which supports
|
||||
NAPI as well.
|
||||
|
||||
|
||||
8. Mailing list
|
||||
===============
|
||||
|
||||
If you are keen to get involved in development, or want to ask questions
|
||||
about configuration, or even just report bugs, then there is a mailing
|
||||
list that you can join, details are at:
|
||||
|
||||
http://sourceforge.net/mail/?group_id=4993
|
||||
|
||||
9. Legal Info
|
||||
=============
|
||||
|
||||
The Linux DECnet project team have placed their code under the GPL. The
|
||||
software is provided "as is" and without warranty express or implied.
|
||||
DECnet is a trademark of Compaq. This software is not a product of
|
||||
Compaq. We acknowledge the help of people at Compaq in providing extra
|
||||
documentation above and beyond what was previously publicly available.
|
||||
|
||||
Steve Whitehouse <SteveW@ACM.org>
|
||||
|
||||
@@ -46,7 +46,6 @@ Contents:
|
||||
cdc_mbim
|
||||
dccp
|
||||
dctcp
|
||||
decnet
|
||||
dns_resolver
|
||||
driver
|
||||
eql
|
||||
|
||||
@@ -303,7 +303,6 @@ Code Seq# Include File Comments
|
||||
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||
0x89 0B-DF linux/sockios.h
|
||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||
0x89 E0-EF linux/dn.h PROTOPRIVATE range
|
||||
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
||||
0x8B all linux/wireless.h
|
||||
0x8C 00-3F WiNRADiO driver
|
||||
|
||||
@@ -4905,13 +4905,6 @@ F: include/linux/tfrc.h
|
||||
F: include/uapi/linux/dccp.h
|
||||
F: net/dccp/
|
||||
|
||||
DECnet NETWORK LAYER
|
||||
L: linux-decnet-user@lists.sourceforge.net
|
||||
S: Orphan
|
||||
W: http://linux-decnet.sourceforge.net
|
||||
F: Documentation/networking/decnet.rst
|
||||
F: net/decnet/
|
||||
|
||||
DECSTATION PLATFORM SUPPORT
|
||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||
L: linux-mips@vger.kernel.org
|
||||
|
||||
@@ -53,8 +53,6 @@ CONFIG_IPV6_SUBTREES=y
|
||||
CONFIG_NETWORK_SECMARK=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_DECNET_ROUTER=y
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
||||
@@ -49,8 +49,6 @@ CONFIG_IPV6_SUBTREES=y
|
||||
CONFIG_NETWORK_SECMARK=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_DECNET_ROUTER=y
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
||||
@@ -48,8 +48,6 @@ CONFIG_IPV6_SUBTREES=y
|
||||
CONFIG_NETWORK_SECMARK=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_DECNET_ROUTER=y
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_UEVENT_HELPER is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
||||
@@ -69,7 +69,6 @@ CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_DECNET_NF_GRABULATOR=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
@@ -99,7 +98,6 @@ CONFIG_ATM_MPOA=m
|
||||
CONFIG_ATM_BR2684=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
|
||||
@@ -117,7 +117,6 @@ CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_DECNET_NF_GRABULATOR=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
@@ -147,7 +146,6 @@ CONFIG_ATM_MPOA=m
|
||||
CONFIG_ATM_BR2684=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
|
||||
@@ -200,7 +200,6 @@ CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_IP6_NF_SECURITY=m
|
||||
CONFIG_DECNET_NF_GRABULATOR=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
@@ -234,7 +233,6 @@ CONFIG_ATM_BR2684=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_VLAN_8021Q_GVRP=y
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
|
||||
@@ -198,7 +198,6 @@ CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_IP6_NF_SECURITY=m
|
||||
CONFIG_DECNET_NF_GRABULATOR=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
@@ -232,7 +231,6 @@ CONFIG_ATM_BR2684=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_VLAN_8021Q_GVRP=y
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
|
||||
@@ -116,7 +116,6 @@ CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_DECNET_NF_GRABULATOR=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
@@ -137,7 +136,6 @@ CONFIG_BRIDGE_EBT_REDIRECT=m
|
||||
CONFIG_BRIDGE_EBT_SNAT=m
|
||||
CONFIG_BRIDGE_EBT_LOG=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NET_SCH_CBQ=m
|
||||
CONFIG_NET_SCH_HTB=m
|
||||
|
||||
@@ -245,8 +245,6 @@ CONFIG_ATM_LANE=m
|
||||
CONFIG_ATM_BR2684=m
|
||||
CONFIG_BRIDGE=m
|
||||
CONFIG_VLAN_8021Q=m
|
||||
CONFIG_DECNET=m
|
||||
CONFIG_DECNET_ROUTER=y
|
||||
CONFIG_ATALK=m
|
||||
CONFIG_DEV_APPLETALK=m
|
||||
CONFIG_IPDDP=m
|
||||
|
||||
@@ -1759,7 +1759,6 @@ enum netdev_ml_priv_type {
|
||||
* @tipc_ptr: TIPC specific data
|
||||
* @atalk_ptr: AppleTalk link
|
||||
* @ip_ptr: IPv4 specific data
|
||||
* @dn_ptr: DECnet specific data
|
||||
* @ip6_ptr: IPv6 specific data
|
||||
* @ax25_ptr: AX.25 specific data
|
||||
* @ieee80211_ptr: IEEE 802.11 specific data, assign before registering
|
||||
@@ -2038,9 +2037,6 @@ struct net_device {
|
||||
void *atalk_ptr;
|
||||
#endif
|
||||
struct in_device __rcu *ip_ptr;
|
||||
#if IS_ENABLED(CONFIG_DECNET)
|
||||
struct dn_dev __rcu *dn_ptr;
|
||||
#endif
|
||||
struct inet6_dev __rcu *ip6_ptr;
|
||||
#if IS_ENABLED(CONFIG_AX25)
|
||||
void *ax25_ptr;
|
||||
|
||||
@@ -237,11 +237,6 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct net *net,
|
||||
hook_head = rcu_dereference(net->nf.hooks_bridge[hook]);
|
||||
#endif
|
||||
break;
|
||||
#if IS_ENABLED(CONFIG_DECNET)
|
||||
case NFPROTO_DECNET:
|
||||
hook_head = rcu_dereference(net->nf.hooks_decnet[hook]);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
WARN_ON_ONCE(1);
|
||||
break;
|
||||
|
||||
@@ -7,14 +7,6 @@
|
||||
/* in/out/forward only */
|
||||
#define NF_ARP_NUMHOOKS 3
|
||||
|
||||
/* max hook is NF_DN_ROUTE (6), also see uapi/linux/netfilter_decnet.h */
|
||||
#define NF_DN_NUMHOOKS 7
|
||||
|
||||
#if IS_ENABLED(CONFIG_DECNET)
|
||||
/* Largest hook number + 1, see uapi/linux/netfilter_decnet.h */
|
||||
#define NF_MAX_HOOKS NF_DN_NUMHOOKS
|
||||
#else
|
||||
#define NF_MAX_HOOKS NF_INET_NUMHOOKS
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
231
include/net/dn.h
231
include/net/dn.h
@@ -1,231 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _NET_DN_H
|
||||
#define _NET_DN_H
|
||||
|
||||
#include <linux/dn.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/flow.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
struct dn_scp /* Session Control Port */
|
||||
{
|
||||
unsigned char state;
|
||||
#define DN_O 1 /* Open */
|
||||
#define DN_CR 2 /* Connect Receive */
|
||||
#define DN_DR 3 /* Disconnect Reject */
|
||||
#define DN_DRC 4 /* Discon. Rej. Complete*/
|
||||
#define DN_CC 5 /* Connect Confirm */
|
||||
#define DN_CI 6 /* Connect Initiate */
|
||||
#define DN_NR 7 /* No resources */
|
||||
#define DN_NC 8 /* No communication */
|
||||
#define DN_CD 9 /* Connect Delivery */
|
||||
#define DN_RJ 10 /* Rejected */
|
||||
#define DN_RUN 11 /* Running */
|
||||
#define DN_DI 12 /* Disconnect Initiate */
|
||||
#define DN_DIC 13 /* Disconnect Complete */
|
||||
#define DN_DN 14 /* Disconnect Notificat */
|
||||
#define DN_CL 15 /* Closed */
|
||||
#define DN_CN 16 /* Closed Notification */
|
||||
|
||||
__le16 addrloc;
|
||||
__le16 addrrem;
|
||||
__u16 numdat;
|
||||
__u16 numoth;
|
||||
__u16 numoth_rcv;
|
||||
__u16 numdat_rcv;
|
||||
__u16 ackxmt_dat;
|
||||
__u16 ackxmt_oth;
|
||||
__u16 ackrcv_dat;
|
||||
__u16 ackrcv_oth;
|
||||
__u8 flowrem_sw;
|
||||
__u8 flowloc_sw;
|
||||
#define DN_SEND 2
|
||||
#define DN_DONTSEND 1
|
||||
#define DN_NOCHANGE 0
|
||||
__u16 flowrem_dat;
|
||||
__u16 flowrem_oth;
|
||||
__u16 flowloc_dat;
|
||||
__u16 flowloc_oth;
|
||||
__u8 services_rem;
|
||||
__u8 services_loc;
|
||||
__u8 info_rem;
|
||||
__u8 info_loc;
|
||||
|
||||
__u16 segsize_rem;
|
||||
__u16 segsize_loc;
|
||||
|
||||
__u8 nonagle;
|
||||
__u8 multi_ireq;
|
||||
__u8 accept_mode;
|
||||
unsigned long seg_total; /* Running total of current segment */
|
||||
|
||||
struct optdata_dn conndata_in;
|
||||
struct optdata_dn conndata_out;
|
||||
struct optdata_dn discdata_in;
|
||||
struct optdata_dn discdata_out;
|
||||
struct accessdata_dn accessdata;
|
||||
|
||||
struct sockaddr_dn addr; /* Local address */
|
||||
struct sockaddr_dn peer; /* Remote address */
|
||||
|
||||
/*
|
||||
* In this case the RTT estimation is not specified in the
|
||||
* docs, nor is any back off algorithm. Here we follow well
|
||||
* known tcp algorithms with a few small variations.
|
||||
*
|
||||
* snd_window: Max number of packets we send before we wait for
|
||||
* an ack to come back. This will become part of a
|
||||
* more complicated scheme when we support flow
|
||||
* control.
|
||||
*
|
||||
* nsp_srtt: Round-Trip-Time (x8) in jiffies. This is a rolling
|
||||
* average.
|
||||
* nsp_rttvar: Round-Trip-Time-Varience (x4) in jiffies. This is the
|
||||
* varience of the smoothed average (but calculated in
|
||||
* a simpler way than for normal statistical varience
|
||||
* calculations).
|
||||
*
|
||||
* nsp_rxtshift: Backoff counter. Value is zero normally, each time
|
||||
* a packet is lost is increases by one until an ack
|
||||
* is received. Its used to index an array of backoff
|
||||
* multipliers.
|
||||
*/
|
||||
#define NSP_MIN_WINDOW 1
|
||||
#define NSP_MAX_WINDOW (0x07fe)
|
||||
unsigned long max_window;
|
||||
unsigned long snd_window;
|
||||
#define NSP_INITIAL_SRTT (HZ)
|
||||
unsigned long nsp_srtt;
|
||||
#define NSP_INITIAL_RTTVAR (HZ*3)
|
||||
unsigned long nsp_rttvar;
|
||||
#define NSP_MAXRXTSHIFT 12
|
||||
unsigned long nsp_rxtshift;
|
||||
|
||||
/*
|
||||
* Output queues, one for data, one for otherdata/linkservice
|
||||
*/
|
||||
struct sk_buff_head data_xmit_queue;
|
||||
struct sk_buff_head other_xmit_queue;
|
||||
|
||||
/*
|
||||
* Input queue for other data
|
||||
*/
|
||||
struct sk_buff_head other_receive_queue;
|
||||
int other_report;
|
||||
|
||||
/*
|
||||
* Stuff to do with the slow timer
|
||||
*/
|
||||
unsigned long stamp; /* time of last transmit */
|
||||
unsigned long persist;
|
||||
int (*persist_fxn)(struct sock *sk);
|
||||
unsigned long keepalive;
|
||||
void (*keepalive_fxn)(struct sock *sk);
|
||||
|
||||
};
|
||||
|
||||
static inline struct dn_scp *DN_SK(struct sock *sk)
|
||||
{
|
||||
return (struct dn_scp *)(sk + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* src,dst : Source and Destination DECnet addresses
|
||||
* hops : Number of hops through the network
|
||||
* dst_port, src_port : NSP port numbers
|
||||
* services, info : Useful data extracted from conninit messages
|
||||
* rt_flags : Routing flags byte
|
||||
* nsp_flags : NSP layer flags byte
|
||||
* segsize : Size of segment
|
||||
* segnum : Number, for data, otherdata and linkservice
|
||||
* xmit_count : Number of times we've transmitted this skb
|
||||
* stamp : Time stamp of most recent transmission, used in RTT calculations
|
||||
* iif: Input interface number
|
||||
*
|
||||
* As a general policy, this structure keeps all addresses in network
|
||||
* byte order, and all else in host byte order. Thus dst, src, dst_port
|
||||
* and src_port are in network order. All else is in host order.
|
||||
*
|
||||
*/
|
||||
#define DN_SKB_CB(skb) ((struct dn_skb_cb *)(skb)->cb)
|
||||
struct dn_skb_cb {
|
||||
__le16 dst;
|
||||
__le16 src;
|
||||
__u16 hops;
|
||||
__le16 dst_port;
|
||||
__le16 src_port;
|
||||
__u8 services;
|
||||
__u8 info;
|
||||
__u8 rt_flags;
|
||||
__u8 nsp_flags;
|
||||
__u16 segsize;
|
||||
__u16 segnum;
|
||||
__u16 xmit_count;
|
||||
unsigned long stamp;
|
||||
int iif;
|
||||
};
|
||||
|
||||
static inline __le16 dn_eth2dn(unsigned char *ethaddr)
|
||||
{
|
||||
return get_unaligned((__le16 *)(ethaddr + 4));
|
||||
}
|
||||
|
||||
static inline __le16 dn_saddr2dn(struct sockaddr_dn *saddr)
|
||||
{
|
||||
return *(__le16 *)saddr->sdn_nodeaddr;
|
||||
}
|
||||
|
||||
static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr)
|
||||
{
|
||||
__u16 a = le16_to_cpu(addr);
|
||||
ethaddr[0] = 0xAA;
|
||||
ethaddr[1] = 0x00;
|
||||
ethaddr[2] = 0x04;
|
||||
ethaddr[3] = 0x00;
|
||||
ethaddr[4] = (__u8)(a & 0xff);
|
||||
ethaddr[5] = (__u8)(a >> 8);
|
||||
}
|
||||
|
||||
static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp)
|
||||
{
|
||||
fld->fld_sport = scp->addrloc;
|
||||
fld->fld_dport = scp->addrrem;
|
||||
}
|
||||
|
||||
unsigned int dn_mss_from_pmtu(struct net_device *dev, int mtu);
|
||||
void dn_register_sysctl(void);
|
||||
void dn_unregister_sysctl(void);
|
||||
|
||||
#define DN_MENUVER_ACC 0x01
|
||||
#define DN_MENUVER_USR 0x02
|
||||
#define DN_MENUVER_PRX 0x04
|
||||
#define DN_MENUVER_UIC 0x08
|
||||
|
||||
struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr);
|
||||
struct sock *dn_find_by_skb(struct sk_buff *skb);
|
||||
#define DN_ASCBUF_LEN 9
|
||||
char *dn_addr2asc(__u16, char *);
|
||||
int dn_destroy_timer(struct sock *sk);
|
||||
|
||||
int dn_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf,
|
||||
unsigned char type);
|
||||
int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *addr,
|
||||
unsigned char *type);
|
||||
|
||||
void dn_start_slow_timer(struct sock *sk);
|
||||
void dn_stop_slow_timer(struct sock *sk);
|
||||
|
||||
extern __le16 decnet_address;
|
||||
extern int decnet_debug_level;
|
||||
extern int decnet_time_wait;
|
||||
extern int decnet_dn_count;
|
||||
extern int decnet_di_count;
|
||||
extern int decnet_dr_count;
|
||||
extern int decnet_no_fc_max_cwnd;
|
||||
|
||||
extern long sysctl_decnet_mem[3];
|
||||
extern int sysctl_decnet_wmem[3];
|
||||
extern int sysctl_decnet_rmem[3];
|
||||
|
||||
#endif /* _NET_DN_H */
|
||||
@@ -1,199 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _NET_DN_DEV_H
|
||||
#define _NET_DN_DEV_H
|
||||
|
||||
|
||||
struct dn_dev;
|
||||
|
||||
struct dn_ifaddr {
|
||||
struct dn_ifaddr __rcu *ifa_next;
|
||||
struct dn_dev *ifa_dev;
|
||||
__le16 ifa_local;
|
||||
__le16 ifa_address;
|
||||
__u32 ifa_flags;
|
||||
__u8 ifa_scope;
|
||||
char ifa_label[IFNAMSIZ];
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
#define DN_DEV_S_RU 0 /* Run - working normally */
|
||||
#define DN_DEV_S_CR 1 /* Circuit Rejected */
|
||||
#define DN_DEV_S_DS 2 /* Data Link Start */
|
||||
#define DN_DEV_S_RI 3 /* Routing Layer Initialize */
|
||||
#define DN_DEV_S_RV 4 /* Routing Layer Verify */
|
||||
#define DN_DEV_S_RC 5 /* Routing Layer Complete */
|
||||
#define DN_DEV_S_OF 6 /* Off */
|
||||
#define DN_DEV_S_HA 7 /* Halt */
|
||||
|
||||
|
||||
/*
|
||||
* The dn_dev_parms structure contains the set of parameters
|
||||
* for each device (hence inclusion in the dn_dev structure)
|
||||
* and an array is used to store the default types of supported
|
||||
* device (in dn_dev.c).
|
||||
*
|
||||
* The type field matches the ARPHRD_ constants and is used in
|
||||
* searching the list for supported devices when new devices
|
||||
* come up.
|
||||
*
|
||||
* The mode field is used to find out if a device is broadcast,
|
||||
* multipoint, or pointopoint. Please note that DECnet thinks
|
||||
* different ways about devices to the rest of the kernel
|
||||
* so the normal IFF_xxx flags are invalid here. For devices
|
||||
* which can be any combination of the previously mentioned
|
||||
* attributes, you can set this on a per device basis by
|
||||
* installing an up() routine.
|
||||
*
|
||||
* The device state field, defines the initial state in which the
|
||||
* device will come up. In the dn_dev structure, it is the actual
|
||||
* state.
|
||||
*
|
||||
* Things have changed here. I've killed timer1 since it's a user space
|
||||
* issue for a user space routing deamon to sort out. The kernel does
|
||||
* not need to be bothered with it.
|
||||
*
|
||||
* Timers:
|
||||
* t2 - Rate limit timer, min time between routing and hello messages
|
||||
* t3 - Hello timer, send hello messages when it expires
|
||||
*
|
||||
* Callbacks:
|
||||
* up() - Called to initialize device, return value can veto use of
|
||||
* device with DECnet.
|
||||
* down() - Called to turn device off when it goes down
|
||||
* timer3() - Called once for each ifaddr when timer 3 goes off
|
||||
*
|
||||
* sysctl - Hook for sysctl things
|
||||
*
|
||||
*/
|
||||
struct dn_dev_parms {
|
||||
int type; /* ARPHRD_xxx */
|
||||
int mode; /* Broadcast, Unicast, Mulitpoint */
|
||||
#define DN_DEV_BCAST 1
|
||||
#define DN_DEV_UCAST 2
|
||||
#define DN_DEV_MPOINT 4
|
||||
int state; /* Initial state */
|
||||
int forwarding; /* 0=EndNode, 1=L1Router, 2=L2Router */
|
||||
unsigned long t2; /* Default value of t2 */
|
||||
unsigned long t3; /* Default value of t3 */
|
||||
int priority; /* Priority to be a router */
|
||||
char *name; /* Name for sysctl */
|
||||
int (*up)(struct net_device *);
|
||||
void (*down)(struct net_device *);
|
||||
void (*timer3)(struct net_device *, struct dn_ifaddr *ifa);
|
||||
void *sysctl;
|
||||
};
|
||||
|
||||
|
||||
struct dn_dev {
|
||||
struct dn_ifaddr __rcu *ifa_list;
|
||||
struct net_device *dev;
|
||||
struct dn_dev_parms parms;
|
||||
char use_long;
|
||||
struct timer_list timer;
|
||||
unsigned long t3;
|
||||
struct neigh_parms *neigh_parms;
|
||||
__u8 addr[ETH_ALEN];
|
||||
struct neighbour *router; /* Default router on circuit */
|
||||
struct neighbour *peer; /* Peer on pointopoint links */
|
||||
unsigned long uptime; /* Time device went up in jiffies */
|
||||
};
|
||||
|
||||
struct dn_short_packet {
|
||||
__u8 msgflg;
|
||||
__le16 dstnode;
|
||||
__le16 srcnode;
|
||||
__u8 forward;
|
||||
} __packed;
|
||||
|
||||
struct dn_long_packet {
|
||||
__u8 msgflg;
|
||||
__u8 d_area;
|
||||
__u8 d_subarea;
|
||||
__u8 d_id[6];
|
||||
__u8 s_area;
|
||||
__u8 s_subarea;
|
||||
__u8 s_id[6];
|
||||
__u8 nl2;
|
||||
__u8 visit_ct;
|
||||
__u8 s_class;
|
||||
__u8 pt;
|
||||
} __packed;
|
||||
|
||||
/*------------------------- DRP - Routing messages ---------------------*/
|
||||
|
||||
struct endnode_hello_message {
|
||||
__u8 msgflg;
|
||||
__u8 tiver[3];
|
||||
__u8 id[6];
|
||||
__u8 iinfo;
|
||||
__le16 blksize;
|
||||
__u8 area;
|
||||
__u8 seed[8];
|
||||
__u8 neighbor[6];
|
||||
__le16 timer;
|
||||
__u8 mpd;
|
||||
__u8 datalen;
|
||||
__u8 data[2];
|
||||
} __packed;
|
||||
|
||||
struct rtnode_hello_message {
|
||||
__u8 msgflg;
|
||||
__u8 tiver[3];
|
||||
__u8 id[6];
|
||||
__u8 iinfo;
|
||||
__le16 blksize;
|
||||
__u8 priority;
|
||||
__u8 area;
|
||||
__le16 timer;
|
||||
__u8 mpd;
|
||||
} __packed;
|
||||
|
||||
|
||||
void dn_dev_init(void);
|
||||
void dn_dev_cleanup(void);
|
||||
|
||||
int dn_dev_ioctl(unsigned int cmd, void __user *arg);
|
||||
|
||||
void dn_dev_devices_off(void);
|
||||
void dn_dev_devices_on(void);
|
||||
|
||||
void dn_dev_init_pkt(struct sk_buff *skb);
|
||||
void dn_dev_veri_pkt(struct sk_buff *skb);
|
||||
void dn_dev_hello(struct sk_buff *skb);
|
||||
|
||||
void dn_dev_up(struct net_device *);
|
||||
void dn_dev_down(struct net_device *);
|
||||
|
||||
int dn_dev_set_default(struct net_device *dev, int force);
|
||||
struct net_device *dn_dev_get_default(void);
|
||||
int dn_dev_bind_default(__le16 *addr);
|
||||
|
||||
int register_dnaddr_notifier(struct notifier_block *nb);
|
||||
int unregister_dnaddr_notifier(struct notifier_block *nb);
|
||||
|
||||
static inline int dn_dev_islocal(struct net_device *dev, __le16 addr)
|
||||
{
|
||||
struct dn_dev *dn_db;
|
||||
struct dn_ifaddr *ifa;
|
||||
int res = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
dn_db = rcu_dereference(dev->dn_ptr);
|
||||
if (dn_db == NULL) {
|
||||
printk(KERN_DEBUG "dn_dev_islocal: Called for non DECnet device\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (ifa = rcu_dereference(dn_db->ifa_list);
|
||||
ifa != NULL;
|
||||
ifa = rcu_dereference(ifa->ifa_next))
|
||||
if ((addr ^ ifa->ifa_local) == 0) {
|
||||
res = 1;
|
||||
break;
|
||||
}
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif /* _NET_DN_DEV_H */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user