It is accurate to say it is bit-rotting, it not accurate to say it is orphaned.
> > I believe that, but obviously nobody is interested to do so. Neither original > authors or users of that code. Well that is not entirely accurate - I think that it is more accurate to say the authors are tired of fixing it and are thinking about a better way to fix this problem long term. It's something we are looking at, at the moment and are open to collaboration on it. >>> >>> So, I don't really have a problem with it not being in VPP proper, so long >>> as it is maintained. >> >> So, you expect that somebody maintains it for you? why? what is his >> incentive to do so? People are typically maintaining some specific feature >> because they are interested in using it and they see a value in open source >> collaboration. >> >> I was under the impression that keeping unmodified code "in sync" would not >> be that difficult, and of great value to the larger community of folks using >> VPP. > > If it is not so difficult, please contribute. To be fair - we do see alot usage of the vRouter plugin - despite all it shortcomings, so we do have a desire & motivation to fix it. And it is also clear from the number of questions we get on it - that there is a strong desire from the community for functionality of this type - it just hasn't turned into action, so far. The question is do we invest time in fixing a design we know is inherently broken (again and again) or do we step back and take a breath. > >> >> The value of VPP is best measured by the number of folks using it. I believe >> a non-trivial number of folks have basically stumbled across VPP from the >> links shared from the FRR project (alternate forwarding planes). >> >> If you don't want those people using VPP, I don't understand your rationale. > > I will be happy that more people is using VPP and contribute back good > quality features for everyone benefit. > I believe good integration between VPP and routing software like FRR is > something we are really missing, but outdated sandbox experiment code > is not solution for that. Agreed, completely - trouble is I have never seen good integration between FRR and anything but Linux. >> It think best way to make feature maintained is to do the work right and >> convince others contributors that this is not throw-over-the-fence code. >> >> I was not the author of netlink or router plugins. I never threw that code >> anywhere. It is published in the vppsb, but has otherwise been left to rot. > > Yes, looks like original authors are not interested to keep it in sync and > improve and also there is nobody to step in. > This is normal in open-source, Look at MAINTAINERS file in Linux kernel > source tree and you will see how much things are declared as orphaned> >> >> The VPP coding practice requires a lot of investment up front to get to the >> meat of the matter. >> For what I am looking for in the immediate short term (getting the plugins >> to compile), that is a huge up-front cost for a very low pay-off. >> >> >> You will be happy as feature is maintained, we will be happy as we will have >> one valuable member of the community. >> >> IMHO, the VPP project's documentation (wiki and otherwise) is inadequate to >> allow new participants with lots of experience doing maintenance-level or >> porting-level modification of C code, to pick up the plug-ins and get the >> bugs fixed. >> >> >> Not being able to write code is not excuse, as you can always find somebody >> to do it for you. >> >> I can write code, that is not the issue at all. >> >> >>> >>> It serves a very specific purpose, and does so adequately, if/when it >>> compiles. >>> >>> It has not been maintained to keep parity with VPP, and I think everyone >>> asking about it, is interested in the minimum amount of effort to keep it >>> viable in the short term. >> >> Who is "everyone" and why do you think think that any vpp contributor or >> committer should work on feature you are interested in instead of working on >> the feature that person is interested in. >> >> I was under the impression that there was a core team coordinating the >> efforts and ensuring project commit dates were met, and that any breakage >> was being fixed. >> If the existing netlink and router plugins were converted to part of the >> core of VPP (that's a big "if", I am aware), would it not be the case that >> you would assign someone to make sure it continued to compile and pass >> regression testing? >> >> I'd be happy to work on these, if the necessary alignment to current >> revisions of VPP were done first. I'm not going to work on a project that >> will always be drifting out of spec because VPP is moving and these plug-ins >> are not maintained. >> >> However, IF they get imported into the mainline VPP, I would very much be >> interested in re-torquing them so the whole "tap-inject" stuff could die a >> horrible death, and the "sniffing" could be altered to being a dedicated >> channel for FRR->VPP routing table management. >> >> >>> >>> >>> Basically: it’s architecturally ugly, and the more you try to fix it, the >>> more difficult the problems become. As an example, you’ll eventually want >>> to be able to mirror the interface state to bird or frr, as they see the >>> tap interfaces. This rabbit hole of this type of issue goes very deep. >>> >>> This ugliness is addressable via multiple means. >>> >>> I think the complaints about support in the short term would probably >>> diminish if long-term plans to provide *some* way of integrating with FRR >>> (and possibly BIRD) were being discussed. >>> >>> I have seen complaints about the ugliness, but not any discussion on a way >>> forward that addresses those issues. >>> >>> I have some suggestions on better solutions, which may already be feasible >>> to do with a minimum of effort by someone familiar with the core of VPP >>> itself (i.e. VPP developers.) >>> >>> Some of the possibilities (some of these have caveats or may not be >>> feasible to be used in some environments): >>> • Bifurcated drivers - the NIC presents itself with two PCIe IDs >>> instead of one ID. Have the VPP use one ID, have the host (and FRR) use the >>> other ID. >>> • The downside is, two MACs are present, and two IP addresses >>> are needed, one for FRR, one for VPP. >>> • This is NOT a good solution, especially for use on actual >>> production routers, where restrictions on MAC addresses and IPs exist, like >>> Internet Exchange Points (IXPs). >>> • Possibly using the "virtual function" modes of NICs, for >>> intercepting the 5-tuples for specific protocols/ports (like BGP as >>> TCP/179, plus other host-specific protocols like SSH >>> • This might be possible using a general mode on the basis of >>> the host's IP addresses >>> • This is a low-level (driver) equivalent to the kernel's >>> IPTABLES functionality >>> • I haven't played with this at all, so can't even be sure >>> this would work >>> • Bridged connection to the host IP stack >>> • Needs to have some handling upstream, by VPP, to figure out >>> where the frame is destined, based on destination IP address >>> • Or, may need to have internal hidden MAC addresses (MAC >>> masquerading?) >>> • Ideally would use Ethernet link state propagation (not sure >>> if that is the right term); transceivers often have this mechanism, for >>> letting the device on one side of a link learn about the link state on the >>> other side of the transceiver (which is technically a two-port bridge) >>> • Both (either) of these also require that the FRR (software router) >>> "talk" to VPP, to pass updates to the routing table >>> • FRR already has built-in support for use of a separate >>> device/socket for such communication; it is a configuration item for the >>> running FRR router. >>> • There are two supported standards, one of which is >>> "netlink" (which the "netlink" plug-in in vppsb has the code for), I don't >>> recall the other one. >>> • This would be a dedicated socket/pipe rather than >>> having to "sniff" /dev/netlink the way the plug-in does >>> • There might also be a need for some kind of >>> internal-only "ethernet" link between the host stack and the VPP routing >>> element(s), that the host can point its default route at, so it isn't >>> necessary for FRR to install the BGP routes into the host's own routing >>> table (this reduces the load on the OS/kernel, as well as avoids >>> duplicating the netlink update packets) >>> At this point, I am interested in (a) seeing if the core VPP developers are >>> interested/willing/able to take this on, and (b) how many folks on the >>> mailing lists are interested in having this capability put into the CORE of >>> VPP (rather than being a sandbox item). >>> >>> I recall seeing a request for router/netlink to be incorporated into the >>> mainline vpp code, which was never approved. >> >> It was never "approved" as nobody was willing to invest his time and >> resources to do it right. >> >> So we have basic everybody vs nobody problem here. As you said everybody >> wants this functionality and nobody is willing to do the work. >> >> I'm willing to meet the VPP folks half-way. Get the plugins (netlink/router) >> to the point where they compile, and I'll work on making it work the right >> way, or at least providing a high level blueprint if anyone can assist on >> the VPP-isation of the code for implementing it. > > I don't see any problem here, assuming that there is still somebody around > who can merge patch there. vpp commiters are not vppsb commiters. > Moving that code to main repo is different, bar is much higher... > >> >> >>> >>> So, saying this is an open source project is kind of disingenuous if the >>> maintainers won't accept the contributed code. >> >> So you believe that any contributions must be accepted. That can be easily >> done by giving write permissions to repo, so anybody can merge his >> "contributions" and we will have real "open source" project. >> >>> >>> Implementing the code in isolation, rather than being accepted upstream, >>> isn't really open source, since EVERYONE who wants this functionality would >>> have to do the same work, independently, rather than being able to share >>> their code via this project. >>> >>> And no, the protocol as a plug-in is not acceptable to the FRR/quagga/BIRD >>> community. >>> >>> The routing update processing is a de-facto standard, supported by all the >>> major software router projects: netlink. >>> >>> The netlink plug-in is there; this doesn't have to be via the tap-inject >>> thing, it can be some other method (such as a socket or named pipe). All >>> I'm asking for is to put into the main VPP code base, so it inherits >>> updates to all the required parts, and will continue to compile as VPP gets >>> updated. >>> >>> Right now, attempting to build these plugins fails, and folks actively >>> using these plugins are STUCK on vpp 18.07 (the only one I am able to >>> build, and then only with a fair bit of tweaking for some slight >>> broken-ness.) >>> >>> Thanks for listening, and with all due respect. >> >> Thank you for sharing your frustration, maybe some good samaritan will feel >> your pain and decide to implement this functionality right so we can happily >> merge it into main repo. >> >> Is there someone running point on VPP at an architectural or directional >> level? >> I seem to recall some three-letter-acronyms for FD.IO but don't see any >> details on the main page that are at all recent, give any indication of long >> term plans, goals, or governance. >> It isn't only the code, it is also the process, in terms of transparency and >> direction. >> Or is the whole vpp thing just moving in whatever random direction that >> current committers individually decide? >> >> I just don't get that there should even be any question regarding the >> importance of control plane for IPv4 and IPv6 (i.e. routing) for providing >> the needed context for the data plane, i.e. VPP. >> Everything about VPP is modular, except routing. >> THAT is my frustration. > > VPP is mainly dataplane, and it was build with assumption that control plane > stuff will be external entity which programs over officially supported binary > APIs. We have few exceptions for simple protocols like arp, nd, dhcp, igmp > which doesn’t fit under dataplane definition, but > all those protocols are native VPP implementations and they can be turned off > if external implementation is used. > > Right thing to do will be to develop glue software which gets routing > protocol packets over the punt/inject path and program VPP forwarding tables > over the binary API. > That glue software can talk with FRR/BIRD/... directly or it can use netlink > hacks but it should be separated from dataplane, which is not the case with > the current plugin. We already have many FIB programming and forwarding tests > which use binary API. Testing of that plugin as it is today will be nightmare. > > Hope this explains… > > — > Damjan > > > > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > > View/Reply Online (#13462): https://lists.fd.io/g/vpp-dev/message/13462 > Mute This Topic: https://lists.fd.io/mt/32309215/675355 > Group Owner: vpp-dev+ow...@lists.fd.io > Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [m...@ashroe.eu] > -=-=-=-=-=-=-=-=-=-=-=- >
signature.asc
Description: OpenPGP digital signature
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#13465): https://lists.fd.io/g/vpp-dev/message/13465 Mute This Topic: https://lists.fd.io/mt/32309215/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-