Age | Commit message (Collapse) | Author |
|
dlg@ and mpi@
|
|
route entry in ART.
rt_plen() now represents the prefix length of a route entry and should
be used instead.
For now use a "struct sockaddr_in6" to represent the mask when needed,
this should be then replaced by the prefix length and RTA_NETMASK only
used for compatibility with userland.
ok claudio@
|
|
|
|
them and they make everything so much harder with no gain. Remove the
ifp argument from mpls_input since it is not needed. On the input side
the lookup side is modified a bit when it comes to BOS handling.
Tested in a L3VPN setup with ldpd and bgpd. Commiting now so we can move
on with cleaning up rt_ifp usage. If this breaks L2VPN I will fix it once
reported. OK mpi@
|
|
As a bonus this removes a "#if NCARP > 0", say yeah!
|
|
|
|
The routing table is not an optional component of the network stack
and initializing it inside the "routing domain" requires some ugly
introspection in the domain interface.
This put the rtable* layer at the same level of the if* level. These
two subsystem are organized around the two global data structure used
in the network stack:
- the global &ifnet list, to be used in process context only, and
- the routing table which can be read in interrupt context.
This change makes the rtable_* layer domain-aware and extends the
"struct domain" such that INET, INET6 and MPLS can specify the length
of the binary key used in lookups. This allows us to keep, or move
towards, AF-free route and rtable layers.
While here stop the madness and pass the size of the maximum key length
in *byte* to rn_inithead0().
ok claudio@, mikeb@
|
|
specific places.
ok claudio@, benno@
|
|
needs to see lo0 in the output path.
ok claudio@
|
|
Use instead the RTF_LOCAL flag to loop local traffic back to the
corresponding protocol queue.
With this change rt_ifp is now always the same as rt_ifa->ifa_ifp.
ok claudio@
|
|
needed since rt0 as passed from the upper layer is freed by that layer.
Also if_output does not free the rt so handle that as well.
With and OK mpi@
|
|
length of the key as argument.
This way every consumer of the radix tree has a chance to explicitly
initialize the shared data structures and no longer rely on another
subsystem to do the initialization.
As a bonus ``dom_maxrtkey'' is no longer used an die.
ART kernels should now be fully usable because pf(4) and IPSEC properly
initialized the radix tree.
ok chris@, reyk@
|
|
As a side effect there's no need to run if_attachdomain() after the
list of domains has been built.
ok claudio@, reyk@
|
|
directly. Also protect non mp-safe functions while at it.
ok mpi@.
|
|
ok mpi@, claudio@.
|
|
with MPLS packets.
ok mpi@, claudio@
|
|
Code abusing the radix internals for the routing table should now
includes <net/rtable.h> and only deal with "struct rtentry".
Code using a radix tree for another purpose can still include
<net/radix.h>.
Inputs from and ok claudio@, mikeb@
|
|
ok stsp mpi
|
|
receiving interface in the packet header of every mbuf.
The interface pointer should now be retrieved when necessary with
if_get(). If a NULL pointer is returned by if_get(), the interface
has probably been destroy/removed and the mbuf should be freed.
Such mechanism will simplify garbage collection of mbufs and limit
problems with dangling ifp pointers.
Tested by jmatthew@ and krw@, discussed with many.
ok mikeb@, bluhm@, dlg@
|
|
with niqueues.
this change is so big because there's a lot of code that takes
pointers to different input queues (eg, ether_input picks between
ipv4, ipv6, pppoe, arp, and mpls input queues) and falls through
to code to enqueue packets against the pointer. if i changed only
one of the input queues id have to add sepearate code paths, one
for ifqueues and one for niqueues in each of these places
by flipping all these input queues at once i can keep the currently
common code common.
testing by mpi@ sthen@ and rafael zalamena
ok mpi@ sthen@ claudio@ henning@
|
|
Since the removal of the link-layer ifa from "struct ifnet" it was
impossible to configure MPLS routes on mpe(4). Because just like
enc(4), mpe(4) was abusing the link-layer ifa to attach its route
entries.
So explicitly pass a "glue" ifa to the routing layer.
From Rafael Zalamena who discovered this the hardway, thanks!
ok claudio@
|
|
ok millert
|
|
|
|
ok mikeb@, krw@, bluhm@, tedu@
|
|
functionnality instead of a mix of enable/disable.
ok bluhm@, jca@
|
|
kill the macro.
ok mikeb@, henning@
|
|
ok miod@ mpi@
|
|
|
|
global variables to in6.h.
ok deraadt@
|
|
created a bunch of useless dependencies. Remove this implicit
inclusion and do an explicit #include <netinet6/in6_var.h> when it
is needed.
OK mpi@ henning@
|
|
ok lteo@, claudio@, bluhm@, henning@
|
|
|
|
|
|
ok beck@, mikeb@
|
|
|
|
we don't need 7 f***ing copies of the same code to do the protocol checksums
(or not, depending on hw capabilities). claudio ok
|
|
immediately checks exactly those flags, claudio ok
|
|
ok claudio@
|
|
diff from form@ who's too busy drinking vodka with pelmeni to commit this;
ok claudio
|
|
the priority support that comes together with it. Currently no balancing
will happen, only the first path will be used.
|
|
explicit NULL labels. IMPLNULL labels should never ever be seen on the
wire but we're realists. michele@ agrees
|
|
TTL exceeded errors for IPv4 are handled. This makes traceroute through
MPLS tunnels work (including RFC 4950 MPLS extension header).
"best to get it in." deraadt@
|
|
packet. For IP and IPv6 the corresponding mapttl sysctl needs to be set.
This is needed to make traceroute work over MPLS.
OK michele@
|
|
|
|
|
|
|
|
modified in between.
|
|
by a pop operation we need to forward the packet to the specified nexthop
as is. This is done by calling the interface output routine directly.
This is different to the local operation since that one injects the packets
into ip_input() via netisr.
OK michele
|
|
on each interface there is no need for yet another knob.
OK michele@
|
|
which relaxes the position of these labels. After discussion with
Christophe Fillot (cf (at) utc fr)
|