summaryrefslogtreecommitdiffstats
path: root/sys/netmpls
AgeCommit message (Collapse)AuthorFilesLines
2021-03-10spellingjsg2-4/+4
ok gnezdo@ semarie@ mpi@
2020-08-19Convert mpls_sysctl to sysctl_bounded_argsgnezdo2-22/+9
OK claudio@
2020-08-01Move range check inside sysctl_int_arrgnezdo1-6/+3
Range violations are now consistently reported as EOPNOTSUPP. Previously they were mixed with ENOPROTOOPT. OK kn@
2020-01-24cleanup unused headers generated by configjsg1-3/+1
ok tedu@ krw@ deraadt@
2019-11-05Remove mpls_inkloop and the corresponding sysctl net.mpls.maxloop_inkernel.claudio2-7/+4
The value is no longer needed since the MPLS code got refactored some time ago. Found by Thomas Habets (thomas (at) habets se)
2019-09-03correct INET6 path in mpls_getttl() and avoid uninitialised variablejsg1-2/+2
ok dlg@
2019-08-27use m_getptr to get to the right mbuf and offset for the ttl in mpls_gettl.dlg1-29/+27
problem found by and this fix was tested by groos at xiplink dot com on bugs@
2019-06-13Copy the user provided sockaddr into a normalized sockaddr in rtrequest()claudio1-1/+2
before adding it to the routing table. The rtable code is doing memcmp() of those rt_dest sockaddrs so it is important that they are stored in a canonical form. To do this struct domain is extended to include the sockaddr size for this address family. OK bluhm@ anton@ Reported-by: syzbot+10fe9cd8d0211c562ead@syzkaller.appspotmail.com
2019-02-08fix ipv4 checksum fixup; this trick requires an accumulator of exactly twice the checksum's widthprocter1-2/+4
ok dlg@
2019-01-30add some macros to help turn labels into shims and back again.dlg1-1/+4
2019-01-29check the result of rtalloc with rtisvalid instead of a compare with NULLdlg1-3/+4
based on advice seen from mpi@
2019-01-27use mpls_ip_adjttl and mpls_ip6_adjttl in mpe instead of rolling it again.dlg2-46/+40
mpls_ip_adjttl now patches the checksum rather than check it and calculate it again. both mpls_ip_adjttl and mpls_ip6_adjttl now rely on the caller to check the sysctls for whether they should run or not, which paves the way for making it configurable in mpe via the tunnel ioctls.
2019-01-27change how packets are pushed into mpe(4).dlg2-14/+2
mpe(4) adds itself ot the mpls rtable with RTF_LOCAL set, which pushes the packet through mpe_output, which sees RTF_LOCAL can calls mpe_input. this follows what mpw(4) does, and removes a special case in mpls_input.
2019-01-27move the mpe_softc definition and mpe macros into the mpe driver.dlg1-13/+1
2019-01-27split off "local" input handlingdlg1-1/+27
this means the current mpls header will be passed along with the mbuf for mpw to look at. right now this doesn't do anything, but it will allow for implementation of RFC 6391 (flow aware transport) and using the exp header for cos. when mpe gets moved to adding an RTF_LOCAL route, this will be used for cos and ttl handling.
2019-01-27forgot to commit the tweaks to mpls_input when mpw became an ethernet ifacedlg1-5/+3
the input mechanism for mpw is now that it inserts a tag into the mpls table with RTF_LOCAL set. mpls_input falls through to calling the interface output routine (mpw_output in this case) which looks for that RTF_LOCAL and then calls mpw_input against that mbuf. ok claudio@ who is keep to apply this semantic to mpe
2019-01-26check if the incoming ttl is <= 1 before decrementing it.dlg1-3/+4
previously it would decrement the uint8_t ttl and then check if it was less than one, which let ttl 0 off the wire wrap to 255 (which is higher than 1).
2018-11-19Retire dom_rtkeylen from struct domain. Nothing is using this anymore.claudio1-2/+1
It was used by the original patricia tree. OK mpi@
2018-01-12Check that mpls has been enabled on the input interface, lost in rev 1.66jca1-2/+7
While here fix under MPLS_DEBUG. ok dlg@
2018-01-10fix some poop that snuck into the last commit.dlg1-3/+5
noticed by bijanebrahimi at riseup dot net and confirmed by anton@
2018-01-09make mpls_input take a struct ifnet *ifp argument.dlg2-46/+20
this makes it like all our other protocol family input functions. mpls_input always looks up the interface the mbuf was received on, but it's always called by code that already has a reference to that interface anyway. the result of this is a few less if_get/if_put calls. ok mpi@ bluhm@ visa@ claudio@
2017-12-08Pullup the mbuf before accessing the version field in the IP header.bluhm1-2/+10
Fix the pullup length of the shim header in mpls_do_error(). issue reported by Maxime Villard; OK deraadt@ claudio@
2017-12-08Use m_freem() in error case. Found by Maxime Villardclaudio1-2/+2
OK bluhm@
2017-12-08The adjttl functions use m_pullup(). In some cases m_pullup() can returnclaudio1-15/+15
a new mbuf chain and this chain needs to be returned to the caller else a use after free may happen. Issue reported by Maxime Villard OK bluhm@ deraadt@
2017-12-08mpls_shim_pop() can return NULL. Check it else we end up dereferencing NULL.claudio1-1/+7
Issue reported by Maxime Villard OK bluhm@ deraadt@
2017-12-08The per-interface mpls flag should also also be tested on input beforederaadt1-14/+24
proceeding, as described in ifconfig documentation. Discussion with claudio. Related to a report from maxime. ok claudio bluhm
2017-05-30Introduce ipv{4,6}_input(), two wrappers around IP queues.mpi1-3/+15
This will help transitionning to an un-KERNEL_LOCK()ed IP forwarding path. Disucssed with bluhm@, ok claudio@
2017-03-02Convert domain declarations to C99 initializers.mpi1-6/+6
ok dhill@, florian@, bluhm@
2017-03-02Allow MPLS switching and VPLS across rdomains.renato1-2/+2
OK claudio@ mpi@
2017-02-28Remove mpls_raw_usrreq() prototype, that function is gone.claudio1-4/+1
2017-02-27Retire the AF_MPLS protosw struct. Nothing is using it and the code was superclaudio4-88/+8
basic anyway. Simplifies the code a lot also by calling the mpls sysctl no longer via the protosw but instead directly. OK mpi@ on a previous diff. Also tested by renato@ who actually found a bug which is now fixed.
2016-11-15Return EOPNOTSUPP instead of calling a function to do only that.mpi1-16/+2
ok phessler@
2016-08-22Do not dereference ``rt->rt_ifa'' after calling rtfree(9).mpi1-2/+3
This could result in a use after free if the route entry was holding the last reference of the address descriptor. ok jca@, bluhm@, claudio@
2016-07-11Revert the introduction of ``rt_addr''.mpi1-2/+2
Being able to add route entries without configured addresses is a nice feature but this is not my fight. So I'd rather no add another pointer to ``struct rtentry'' if I'm not removing another one.
2016-06-14Store the source address associated with a route in its own chunk ofmpi1-2/+2
memory. This will allow to unlink 'sruct rtentry' and 'struct ifaddr' to be able to add route entries without needing an address. ok sthen@, visa@, florian@
2015-12-04There is no need to grab the KERNEL_LOCK here anymore. After discussion withclaudio1-7/+1
dlg@ and mpi@
2015-12-03Get rid of rt_mask() and stop allocating a "struct sockaddr" for everympi1-2/+2
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@
2015-12-02Oups, forgot in the tedu of RT_REPORT commitclaudio1-3/+3
2015-12-02Rework the MPLS handling. Remove the lookup loops since nothing is usingclaudio3-226/+155
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@
2015-11-24No need for <net/if_types.h>mpi1-2/+1
As a bonus this removes a "#if NCARP > 0", say yeah!
2015-10-23rtfree(9) and rtalloc(9) no longer need to be called under KERNEL_LOCK.mpi1-20/+7
2015-10-07Initialize the routing table before domains.mpi1-3/+3
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@
2015-09-23Always increment rt_use inside rtalloc(9) instead of doing it in somempi2-5/+2
specific places. ok claudio@, benno@
2015-09-13There's no point in abstracting ifp->if_output() as long as pf_test()mpi2-4/+4
needs to see lo0 in the output path. ok claudio@
2015-09-12Stop overwriting the rt_ifp pointer of RTF_LOCAL routes with lo0ifp.mpi2-4/+4
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@
2015-09-12Use rtfree() instead of playing with the refcount directly. Some care isclaudio1-6/+11
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@
2015-09-04Make every subsystem using a radix tree call rn_init() and pass thempi1-3/+2
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@
2015-08-30Use a global table for domains instead of building a list at run time.mpi1-2/+2
As a side effect there's no need to run if_attachdomain() after the list of domains has been built. ok claudio@, reyk@
2015-07-29Don't use mpls_input() as input handler anymore and instead call itrzalamena2-53/+26
directly. Also protect non mp-safe functions while at it. ok mpi@.
2015-07-20Implemented MPLS pseudowire (mpw(4)) to be used with VPLS and VPWS.rzalamena2-2/+24
ok mpi@, claudio@.