diff options
author | Pim van Pelt <pim@ipng.nl> | 2021-08-12 21:35:06 +0200 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2021-09-09 13:02:34 +0000 |
commit | b89c1ddcb3b4f9138ca3ebefb2115f896ff3e1bd (patch) | |
tree | 2f828c4be47a5fe3a46d052875f8197f524ba5bd /src/plugins/linux-cp/lcp.c | |
parent | 7b46e4bc574e6dfa7f5a454a696476744625c55f (diff) |
linux-cp: Complete interface creation logic
Linux Control Plane interface creation logic is currently only able to
create untagged interfaces, and dot1q VLAN sub-interfaces. This change
makes it possible to create dot1ad VLAN sub-ints, and Q-in-AD as well
as Q-in-Q sub-interfaces as well.
It makes the plugin a bit more robust by catching a few common errors,
such as creating an lcp on a sub-interface without its parent having
one, and creating an lcp on a sub-interface that is not exact-match.
This change has a bunch of smaller improvemnets as well. I documented
my work in this post:
https://ipng.ch/s/articles/2021/08/12/vpp-1.html
It shows that after the change is merged, all VPP interface types now
create and operate cleanly as LCP interfaces as well.
Type: improvement
Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I322669f7316d44c227090b83d6a574fb9c00e76a
Diffstat (limited to 'src/plugins/linux-cp/lcp.c')
-rw-r--r-- | src/plugins/linux-cp/lcp.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/plugins/linux-cp/lcp.c b/src/plugins/linux-cp/lcp.c index f4c491c9cb3..a4d3faf081a 100644 --- a/src/plugins/linux-cp/lcp.c +++ b/src/plugins/linux-cp/lcp.c @@ -28,8 +28,9 @@ lcp_get_default_ns (void) { lcp_main_t *lcpm = &lcp_main; - if (lcpm->default_namespace[0] == 0) - return 0; + if (!lcpm->default_namespace || lcpm->default_namespace[0] == 0) + return NULL; + return lcpm->default_namespace; } @@ -59,16 +60,15 @@ lcp_set_default_ns (u8 *ns) if (!p || *p == 0) { - clib_memset (lcpm->default_namespace, 0, - sizeof (lcpm->default_namespace)); + lcpm->default_namespace = NULL; if (lcpm->default_ns_fd > 0) close (lcpm->default_ns_fd); lcpm->default_ns_fd = 0; return 0; } - clib_strncpy ((char *) lcpm->default_namespace, p, LCP_NS_LEN - 1); - + vec_validate_init_c_string (lcpm->default_namespace, p, + clib_strnlen (p, LCP_NS_LEN)); s = format (0, "/var/run/netns/%s%c", (char *) lcpm->default_namespace, 0); lcpm->default_ns_fd = open ((char *) s, O_RDONLY); vec_free (s); |