diff --git a/felix/Makefile b/felix/Makefile index 0c97b4dcd5c..a3b148fff3d 100644 --- a/felix/Makefile +++ b/felix/Makefile @@ -195,7 +195,8 @@ protobuf proto/felixbackend.pb.go: proto/felixbackend.proto # We pre-build lots of different variants of the TC programs, defer to the script. BPF_GPL_O_FILES:=$(addprefix bpf-gpl/,$(shell bpf-gpl/list-objs)) -BPF_GPL_O_FILES+=bpf-gpl/bin/tc_preamble.o bpf-gpl/bin/xdp_preamble.o bpf-gpl/bin/policy_default.o +BPF_GPL_O_FILES+=bpf-gpl/bin/tc_preamble.o bpf-gpl/bin/tc_preamble_v6.o \ + bpf-gpl/bin/xdp_preamble.o bpf-gpl/bin/policy_default.o # There's a one-to-one mapping from UT C files to objects and the same for the apache programs.. BPF_GPL_UT_O_FILES:=$(BPF_GPL_UT_C_FILES:.c=.o) $(addprefix bpf-gpl/,$(shell bpf-gpl/list-ut-objs)) diff --git a/felix/bpf-gpl/Makefile b/felix/bpf-gpl/Makefile index c09cfc7301e..5a24e9354bb 100644 --- a/felix/bpf-gpl/Makefile +++ b/felix/bpf-gpl/Makefile @@ -55,7 +55,7 @@ OBJS+=bin/tc_preamble.o OBJS+=bin/tc_preamble_v6.o OBJS+=bin/xdp_preamble.o OBJS+=bin/policy_default.o -C_FILES:=tc_preamble.c tc.c connect_balancer.c connect_balancer_v6.c xdp_preamble.c xdp.c policy_default.c +C_FILES:=tc_preamble.c tc.c connect_balancer.c connect_balancer_v46.c connect_balancer_v6.c xdp_preamble.c xdp.c policy_default.c all: $(OBJS) ut-objs: $(UT_OBJS) @@ -63,8 +63,10 @@ ut-objs: $(UT_OBJS) COMPILE=$(CC) $(CFLAGS) `./calculate-flags $@` -c $< -o $@ connect_time_%v4.ll: connect_balancer.c connect_balancer.d calculate-flags $(COMPILE) -connect_time_%v6.ll: connect_balancer_v6.c connect_balancer_v6.d calculate-flags +connect_time_%v46.ll: connect_balancer_v46.c connect_balancer_v46.d calculate-flags $(COMPILE) +connect_time_%v6.ll: connect_balancer_v6.c connect_balancer_v6.d calculate-flags + $(COMPILE) -DIPVER6 UT_CFLAGS=\ -D__BPFTOOL_LOADER__ \ @@ -127,10 +129,14 @@ bin/xdp%.o: xdp%.ll | bin $(LINK) bin/connect_time_%v4.o: connect_time_%v4.ll | bin $(LINK) +bin/connect_time_%v46.o: connect_time_%v46.ll | bin + $(LINK) bin/connect_time_%v6.o: connect_time_%v6.ll | bin $(LINK) bin/connect_time_%v4_co-re.o: connect_time_%v4.ll | bin $(LINK) +bin/connect_time_%v46_co-re.o: connect_time_%v46.ll | bin + $(LINK) bin/connect_time_%v6_co-re.o: connect_time_%v6.ll | bin $(LINK) ut/%.o: ut/%.ll diff --git a/felix/bpf-gpl/bpf.h b/felix/bpf-gpl/bpf.h index bca62b6a1b2..52e5dfe4b40 100644 --- a/felix/bpf-gpl/bpf.h +++ b/felix/bpf-gpl/bpf.h @@ -102,12 +102,7 @@ #define CALI_FIB_LOOKUP_ENABLED true #endif -#ifdef IPVER6 -#undef CALI_FIB_LOOKUP_ENABLED -#define CALI_FIB_LOOKUP_ENABLED false -#else #define CALI_FIB_ENABLED (!CALI_F_L3 && CALI_FIB_LOOKUP_ENABLED && (CALI_F_TO_HOST || CALI_F_TO_HEP)) -#endif #define COMPILE_TIME_ASSERT(expr) {typedef char array[(expr) ? 1 : -1];} static CALI_BPF_INLINE void __compile_asserts(void) { diff --git a/felix/bpf-gpl/connect.h b/felix/bpf-gpl/connect.h index daed9825738..10f480f79b4 100644 --- a/felix/bpf-gpl/connect.h +++ b/felix/bpf-gpl/connect.h @@ -40,7 +40,7 @@ static CALI_BPF_INLINE int do_nat_common(struct bpf_sock_addr *ctx, __u8 proto, __u64 cookie = bpf_get_socket_cookie(ctx); CALI_DEBUG("Store: ip=%x port=%d cookie=%x\n", - bpf_ntohl(nat_dest->addr), bpf_ntohs((__u16)dport_be), cookie); + debug_ip(nat_dest->addr), bpf_ntohs((__u16)dport_be), cookie); /* For all protocols, record recent NAT operations in an LRU map; other BPF programs use this * cache to reverse our DNAT so they can do pre-DNAT policy. */ @@ -65,7 +65,7 @@ static CALI_BPF_INLINE int do_nat_common(struct bpf_sock_addr *ctx, __u8 proto, * check the source on the return packets. */ __u64 cookie = bpf_get_socket_cookie(ctx); CALI_DEBUG("Store: ip=%x port=%d cookie=%x\n", - bpf_ntohl(nat_dest->addr), bpf_ntohs((__u16)dport_be), cookie); + debug_ip(nat_dest->addr), bpf_ntohs((__u16)dport_be), cookie); struct sendrec_key key = { .ip = nat_dest->addr, .port = dport_be, @@ -86,7 +86,7 @@ static CALI_BPF_INLINE int do_nat_common(struct bpf_sock_addr *ctx, __u8 proto, return err; } -static CALI_BPF_INLINE int connect_v4(struct bpf_sock_addr *ctx, ipv46_addr_t *dst) +static CALI_BPF_INLINE int connect(struct bpf_sock_addr *ctx, ipv46_addr_t *dst) { int ret = 1; /* OK value */ diff --git a/felix/bpf-gpl/connect_balancer.c b/felix/bpf-gpl/connect_balancer.c index 93e26c3d46b..b51b710603c 100644 --- a/felix/bpf-gpl/connect_balancer.c +++ b/felix/bpf-gpl/connect_balancer.c @@ -25,7 +25,7 @@ int calico_connect_v4(struct bpf_sock_addr *ctx) { CALI_DEBUG("calico_connect_v4\n"); - return connect_v4(ctx, &ctx->user_ip4); + return connect(ctx, &ctx->user_ip4); } SEC("cgroup/sendmsg4") diff --git a/felix/bpf-gpl/connect_balancer_v46.c b/felix/bpf-gpl/connect_balancer_v46.c new file mode 100644 index 00000000000..bba1b281a75 --- /dev/null +++ b/felix/bpf-gpl/connect_balancer_v46.c @@ -0,0 +1,127 @@ +// Project Calico BPF dataplane programs. +// Copyright (c) 2020-2022 Tigera, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later + +#include + +// socket_type.h contains the definition of SOCK_XXX constants that we need +// but it's supposed to be imported via socket.h, which we can't import due +// to lack of std lib support for BPF. Bypass its check for now. +#define _SYS_SOCKET_H +#include + +#include + +#include "bpf.h" +#include "log.h" +#include "globals.h" +#include "ctlb.h" + +#include "sendrecv.h" +#include "connect.h" + +SEC("cgroup/connect6") +int calico_connect_v46(struct bpf_sock_addr *ctx) +{ + int ret = 1; + __be32 ipv4; + + CALI_DEBUG("connect_v46 ip[0-1] %x%x\n", + ctx->user_ip6[0], + ctx->user_ip6[1]); + CALI_DEBUG("connect_v46 ip[2-3] %x%x\n", + ctx->user_ip6[2], + ctx->user_ip6[3]); + + /* check if it is a IPv4 mapped as IPv6 and if so, use the v4 table */ + if (ctx->user_ip6[0] == 0 && ctx->user_ip6[1] == 0 && + ctx->user_ip6[2] == bpf_htonl(0x0000ffff)) { + goto v4; + } + + CALI_DEBUG("connect_v46: not implemented for v6 yet\n"); + goto out; + +v4: + ipv4 = ctx->user_ip6[3]; + + if ((ret = connect(ctx, &ipv4)) != 1) { + goto out; + } + + ctx->user_ip6[3] = ipv4; + +out: + return ret; +} + +SEC("cgroup/sendmsg6") +int calico_sendmsg_v46(struct bpf_sock_addr *ctx) +{ + CALI_DEBUG("sendmsg_v46\n"); + + return 1; +} + +SEC("cgroup/recvmsg6") +int calico_recvmsg_v46(struct bpf_sock_addr *ctx) +{ + if (CTLB_EXCLUDE_UDP) { + goto out; + } + + __be32 ipv4; + + CALI_DEBUG("recvmsg_v46 ip[0-1] %x%x\n", + ctx->user_ip6[0], + ctx->user_ip6[1]); + CALI_DEBUG("recvmsg_v46 ip[2-3] %x%x\n", + ctx->user_ip6[2], + ctx->user_ip6[3]); + + /* check if it is a IPv4 mapped as IPv6 and if so, use the v4 table */ + if (ctx->user_ip6[0] == 0 && ctx->user_ip6[1] == 0 && + ctx->user_ip6[2] == bpf_htonl(0x0000ffff)) { + goto v4; + } + + CALI_DEBUG("recvmsg_v46: not implemented for v6 yet\n"); + goto out; + + +v4: + ipv4 = ctx->user_ip6[3]; + CALI_DEBUG("recvmsg_v46 %x:%d\n", bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + + if (ctx->type != SOCK_DGRAM) { + CALI_INFO("unexpected sock type %d\n", ctx->type); + goto out; + } + + struct sendrec_key key = { + .ip = ipv4, + .port = ctx->user_port, + .cookie = bpf_get_socket_cookie(ctx), + }; + + struct sendrec_val *revnat = cali_srmsg_lookup_elem(&key); + + if (revnat == NULL) { + CALI_DEBUG("revnat miss for %x:%d\n", + bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + /* we are past policy and the packet was allowed. Either the + * mapping does not exist anymore and if the app cares, it + * should check the addresses. It is more likely a packet sent + * to server from outside and no mapping is expected. + */ + goto out; + } + + ctx->user_ip6[3] = revnat->ip; + ctx->user_port = revnat->port; + CALI_DEBUG("recvmsg_v46 v4 rev nat to %x:%d\n", + bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + +out: + return 1; +} diff --git a/felix/bpf-gpl/connect_balancer_v6.c b/felix/bpf-gpl/connect_balancer_v6.c index e3d2e51f1d5..47b2249b275 100644 --- a/felix/bpf-gpl/connect_balancer_v6.c +++ b/felix/bpf-gpl/connect_balancer_v6.c @@ -2,8 +2,6 @@ // Copyright (c) 2020-2022 Tigera, Inc. All rights reserved. // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later -#undef IPVER6 /* XXX */ - #include // socket_type.h contains the definition of SOCK_XXX constants that we need @@ -15,9 +13,9 @@ #include #include "bpf.h" -#include "log.h" #include "globals.h" #include "ctlb.h" +#include "log.h" #include "sendrecv.h" #include "connect.h" @@ -25,43 +23,39 @@ SEC("cgroup/connect6") int calico_connect_v6(struct bpf_sock_addr *ctx) { - int ret = 1; - __be32 ipv4; - - CALI_DEBUG("connect_v6 ip[0-1] %x%x\n", - ctx->user_ip6[0], - ctx->user_ip6[1]); - CALI_DEBUG("connect_v6 ip[2-3] %x%x\n", - ctx->user_ip6[2], - ctx->user_ip6[3]); - - /* check if it is a IPv4 mapped as IPv6 and if so, use the v4 table */ - if (ctx->user_ip6[0] == 0 && ctx->user_ip6[1] == 0 && - ctx->user_ip6[2] == bpf_htonl(0x0000ffff)) { - goto v4; - } + CALI_DEBUG("calico_connect_v6\n"); - CALI_DEBUG("connect_v6: not implemented for v6 yet\n"); - goto out; - -v4: - ipv4 = ctx->user_ip6[3]; - - if ((ret = connect_v4(ctx, &ipv4)) != 1) { - goto out; - } + ipv46_addr_t dst = {}; + be32_4_ip_to_ipv6_addr_t(&dst, ctx->user_ip6); - ctx->user_ip6[3] = ipv4; + int ret = connect(ctx, &dst); + ipv6_addr_t_to_be32_4_ip(ctx->user_ip6, &dst); -out: return ret; } SEC("cgroup/sendmsg6") int calico_sendmsg_v6(struct bpf_sock_addr *ctx) { - CALI_DEBUG("sendmsg_v6\n"); + if (CTLB_EXCLUDE_UDP) { + goto out; + } + + CALI_DEBUG("sendmsg_v6 %x:%d\n", + bpf_ntohl(ctx->user_ip6[3]), bpf_ntohl(ctx->user_port)>>16); + if (ctx->type != SOCK_DGRAM) { + CALI_INFO("unexpected sock type %d\n", ctx->type); + goto out; + } + + ipv46_addr_t dst = {}; + be32_4_ip_to_ipv6_addr_t(&dst, ctx->user_ip6); + + do_nat_common(ctx, IPPROTO_UDP, &dst, false); + ipv6_addr_t_to_be32_4_ip(ctx->user_ip6, &dst); + +out: return 1; } @@ -72,45 +66,26 @@ int calico_recvmsg_v6(struct bpf_sock_addr *ctx) goto out; } - __be32 ipv4; - - CALI_DEBUG("recvmsg_v6 ip[0-1] %x%x\n", - ctx->user_ip6[0], - ctx->user_ip6[1]); - CALI_DEBUG("recvmsg_v6 ip[2-3] %x%x\n", - ctx->user_ip6[2], - ctx->user_ip6[3]); - - /* check if it is a IPv4 mapped as IPv6 and if so, use the v4 table */ - if (ctx->user_ip6[0] == 0 && ctx->user_ip6[1] == 0 && - ctx->user_ip6[2] == bpf_htonl(0x0000ffff)) { - goto v4; - } - - CALI_DEBUG("recvmsg_v6: not implemented for v6 yet\n"); - goto out; - - -v4: - ipv4 = ctx->user_ip6[3]; - CALI_DEBUG("recvmsg_v6 %x:%d\n", bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + CALI_DEBUG("recvmsg_v6 %x:%d\n", bpf_ntohl(ctx->user_ip6[3]), ctx_port_to_host(ctx->user_port)); if (ctx->type != SOCK_DGRAM) { CALI_INFO("unexpected sock type %d\n", ctx->type); goto out; } + __u64 cookie = bpf_get_socket_cookie(ctx); + CALI_DEBUG("Lookup: ip=%x port=%d(BE) cookie=%x\n", bpf_ntohl(ctx->user_ip6[3]), ctx->user_port, cookie); struct sendrec_key key = { - .ip = ipv4, .port = ctx->user_port, - .cookie = bpf_get_socket_cookie(ctx), + .cookie = cookie, }; + be32_4_ip_to_ipv6_addr_t(&key.ip, ctx->user_ip6); struct sendrec_val *revnat = cali_srmsg_lookup_elem(&key); if (revnat == NULL) { CALI_DEBUG("revnat miss for %x:%d\n", - bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + bpf_ntohl(ctx->user_ip6[3]), ctx_port_to_host(ctx->user_port)); /* we are past policy and the packet was allowed. Either the * mapping does not exist anymore and if the app cares, it * should check the addresses. It is more likely a packet sent @@ -119,10 +94,10 @@ int calico_recvmsg_v6(struct bpf_sock_addr *ctx) goto out; } - ctx->user_ip6[3] = revnat->ip; + ipv6_addr_t_to_be32_4_ip(ctx->user_ip6, &revnat->ip); ctx->user_port = revnat->port; - CALI_DEBUG("recvmsg_v6 v4 rev nat to %x:%d\n", - bpf_ntohl(ipv4), ctx_port_to_host(ctx->user_port)); + CALI_DEBUG("recvmsg_v6 rev nat to %x:%d\n", + bpf_ntohl(ctx->user_ip6[3]), ctx_port_to_host(ctx->user_port)); out: return 1; diff --git a/felix/bpf-gpl/conntrack.h b/felix/bpf-gpl/conntrack.h index 542134f6baf..b1e4746e75d 100644 --- a/felix/bpf-gpl/conntrack.h +++ b/felix/bpf-gpl/conntrack.h @@ -23,7 +23,7 @@ static CALI_BPF_INLINE int psnat_get_port(struct cali_tc_ctx *ctx) #ifdef IPVER6 -static CALI_BPF_INLINE bool src_lt_dest(ipv6_addr_t ip_src, ipv6_addr_t ip_dst, __u16 sport, __u16 dport) +static CALI_BPF_INLINE bool src_lt_dest(ipv6_addr_t *ip_src, ipv6_addr_t *ip_dst, __u16 sport, __u16 dport) { int ret = ipv6_addr_t_cmp(ip_src, ip_dst); @@ -37,7 +37,7 @@ static CALI_BPF_INLINE bool src_lt_dest(ipv6_addr_t ip_src, ipv6_addr_t ip_dst, #else #define src_lt_dest(ip_src, ip_dst, sport, dport) \ - ((ip_src) < (ip_dst)) || (((ip_src) == (ip_dst)) && (sport) < (dport)) + (*(ip_src) < *(ip_dst)) || ((*(ip_src) == *(ip_dst)) && (sport) < (dport)) #endif /* IPVER6 */ @@ -94,7 +94,7 @@ static CALI_BPF_INLINE int calico_ct_v4_create_tracking(struct cali_tc_ctx *ctx, */ CALI_VERB("CT-ALL Asked to create entry but packet is marked as " "from another endpoint, doing lookup\n"); - bool srcLTDest = src_lt_dest(ct_ctx->src, ct_ctx->dst, sport, dport); + bool srcLTDest = src_lt_dest(&ct_ctx->src, &ct_ctx->dst, sport, dport); fill_ct_key(k, srcLTDest, ct_ctx->proto, &ct_ctx->src, &ct_ctx->dst, sport, dport); struct calico_ct_value *ct_value = cali_ct_lookup_elem(k); if (!ct_value) { @@ -161,7 +161,7 @@ static CALI_BPF_INLINE int calico_ct_v4_create_tracking(struct cali_tc_ctx *ctx, } struct calico_ct_leg *src_to_dst, *dst_to_src; - bool srcLTDest = src_lt_dest(ct_ctx->src, ct_ctx->dst, sport, dport); + bool srcLTDest = src_lt_dest(&ct_ctx->src, &ct_ctx->dst, sport, dport); fill_ct_key(k, srcLTDest, ct_ctx->proto, &ct_ctx->src, &ct_ctx->dst, sport, dport); if (srcLTDest) { @@ -230,7 +230,7 @@ static CALI_BPF_INLINE int calico_ct_v4_create_tracking(struct cali_tc_ctx *ctx, ct_value.orig_sport = sport; - bool src_lt_dst = ip_lt(ct_ctx->src, ct_ctx->dst); + bool src_lt_dst = ip_lt(&ct_ctx->src, &ct_ctx->dst); for (i = 0; i < PSNAT_RETRIES; i++) { sport = psnat_get_port(ctx); @@ -297,7 +297,7 @@ static CALI_BPF_INLINE int calico_ct_create_nat_fwd(struct cali_tc_ctx *ctx, * which also uses the rk! */ struct calico_ct_key *k = rk; - bool srcLTDest = src_lt_dest(ip_src, ip_dst, sport, dport); + bool srcLTDest = src_lt_dest(&ip_src, &ip_dst, sport, dport); fill_ct_key(k, srcLTDest, ct_ctx->proto, &ip_src, &ip_dst, sport, dport); if (ct_ctx->orig_sport != ct_ctx->sport) { @@ -527,7 +527,7 @@ static CALI_BPF_INLINE struct calico_ct_result calico_ct_v4_lookup(struct cali_t .ifindex_created = CT_INVALID_IFINDEX, }; - bool srcLTDest = src_lt_dest(ip_src, ip_dst, sport, dport); + bool srcLTDest = src_lt_dest(&ip_src, &ip_dst, sport, dport); struct calico_ct_key k; bool syn = tcp_header && tcp_header->syn && !tcp_header->ack; @@ -587,7 +587,7 @@ static CALI_BPF_INLINE struct calico_ct_result calico_ct_v4_lookup(struct cali_t CALI_CT_DEBUG("related lookup from %x:%d\n", debug_ip(ct_ctx->src), ct_ctx->sport); CALI_CT_DEBUG("related lookup to %x:%d\n", debug_ip(ct_ctx->dst), ct_ctx->dport); - srcLTDest = src_lt_dest(ct_ctx->src, ct_ctx->dst, ct_ctx->sport, ct_ctx->dport); + srcLTDest = src_lt_dest(&ct_ctx->src, &ct_ctx->dst, ct_ctx->sport, ct_ctx->dport); fill_ct_key(&k, srcLTDest, ct_ctx->proto, &ct_ctx->src, &ct_ctx->dst, ct_ctx->sport, ct_ctx->dport); v = cali_ct_lookup_elem(&k); if (!v) { diff --git a/felix/bpf-gpl/failsafe.h b/felix/bpf-gpl/failsafe.h index 3bd0733c5b7..c544971b030 100644 --- a/felix/bpf-gpl/failsafe.h +++ b/felix/bpf-gpl/failsafe.h @@ -13,14 +13,18 @@ struct failsafe_key { __u16 port; __u8 ip_proto; __u8 flags; - __u32 addr; + ipv46_addr_t addr; }; struct failsafe_val { __u32 unused; }; -CALI_MAP(cali_v4_fsafes, 2, +#ifdef IPVER6 +CALI_MAP_NAMED(cali_v6_fsafes, cali_fsafes, 2, +#else +CALI_MAP_NAMED(cali_v4_fsafes, cali_fsafes, 2, +#endif BPF_MAP_TYPE_LPM_TRIE, struct failsafe_key, struct failsafe_val, 65536, @@ -44,7 +48,7 @@ static CALI_BPF_INLINE bool is_failsafe_in(__u8 ip_proto, __u16 dport, ipv46_add .flags = 0, .addr = ip, }; - if (cali_v4_fsafes_lookup_elem(&key)) { + if (cali_fsafes_lookup_elem(&key)) { return true; } #else @@ -62,7 +66,7 @@ static CALI_BPF_INLINE bool is_failsafe_out(__u8 ip_proto, __u16 dport, ipv46_ad .flags = CALI_FSAFE_OUT, .addr = ip, }; - if (cali_v4_fsafes_lookup_elem(&key)) { + if (cali_fsafes_lookup_elem(&key)) { return true; } #else diff --git a/felix/bpf-gpl/fib.h b/felix/bpf-gpl/fib.h index 861e946587b..6d5dfa09e56 100644 --- a/felix/bpf-gpl/fib.h +++ b/felix/bpf-gpl/fib.h @@ -165,8 +165,12 @@ static CALI_BPF_INLINE int forward_or_drop(struct cali_tc_ctx *ctx) goto cancel_fib; } - struct bpf_fib_lookup fib_params = { + *fib_params(ctx) = (struct bpf_fib_lookup) { +#ifdef IPVER6 + .family = 10, /* AF_INET6 */ +#else .family = 2, /* AF_INET */ +#endif .tot_len = 0, .ifindex = CALI_F_TO_HOST ? ctx->skb->ingress_ifindex : ctx->skb->ifindex, .l4_protocol = state->ip_proto, @@ -177,61 +181,78 @@ static CALI_BPF_INLINE int forward_or_drop(struct cali_tc_ctx *ctx) /* set the ipv4 here, otherwise the ipv4/6 unions do not get * zeroed properly */ - fib_params.ipv4_src = state->ip_src; - fib_params.ipv4_dst = state->ip_dst; - - CALI_DEBUG("FIB family=%d\n", fib_params.family); - CALI_DEBUG("FIB tot_len=%d\n", fib_params.tot_len); - CALI_DEBUG("FIB ifindex=%d\n", fib_params.ifindex); - CALI_DEBUG("FIB l4_protocol=%d\n", fib_params.l4_protocol); - CALI_DEBUG("FIB sport=%d\n", bpf_ntohs(fib_params.sport)); - CALI_DEBUG("FIB dport=%d\n", bpf_ntohs(fib_params.dport)); - CALI_DEBUG("FIB ipv4_src=%x\n", bpf_ntohl(fib_params.ipv4_src)); - CALI_DEBUG("FIB ipv4_dst=%x\n", bpf_ntohl(fib_params.ipv4_dst)); + +#ifdef IPVER6 + ipv6_addr_t_to_be32_4_ip(fib_params(ctx)->ipv6_src, &state->ip_src); + ipv6_addr_t_to_be32_4_ip(fib_params(ctx)->ipv6_dst, &state->ip_dst); +#else + fib_params(ctx)->ipv4_src = state->ip_src; + fib_params(ctx)->ipv4_dst = state->ip_dst; +#endif + + CALI_DEBUG("FIB family=%d\n", fib_params(ctx)->family); + CALI_DEBUG("FIB tot_len=%d\n", fib_params(ctx)->tot_len); + CALI_DEBUG("FIB ifindex=%d\n", fib_params(ctx)->ifindex); + CALI_DEBUG("FIB l4_protocol=%d\n", fib_params(ctx)->l4_protocol); + CALI_DEBUG("FIB sport=%d\n", bpf_ntohs(fib_params(ctx)->sport)); + CALI_DEBUG("FIB dport=%d\n", bpf_ntohs(fib_params(ctx)->dport)); +#ifdef IPVER6 +#else + CALI_DEBUG("FIB ipv4_src=%x\n", bpf_ntohl(fib_params(ctx)->ipv4_src)); + CALI_DEBUG("FIB ipv4_dst=%x\n", bpf_ntohl(fib_params(ctx)->ipv4_dst)); +#endif CALI_DEBUG("Traffic is towards the host namespace, doing Linux FIB lookup\n"); - rc = bpf_fib_lookup(ctx->skb, &fib_params, sizeof(fib_params), ctx->fwd.fib_flags); + rc = bpf_fib_lookup(ctx->skb, fib_params(ctx), sizeof(struct bpf_fib_lookup), ctx->fwd.fib_flags); switch (rc) { case 0: CALI_DEBUG("FIB lookup succeeded - with neigh\n"); - if (!fib_approve(ctx, fib_params.ifindex)) { + if (!fib_approve(ctx, fib_params(ctx)->ifindex)) { reason = CALI_REASON_WEP_NOT_READY; goto deny; } // Update the MACs. struct ethhdr *eth_hdr = ctx->data_start; - __builtin_memcpy(ð_hdr->h_source, fib_params.smac, sizeof(eth_hdr->h_source)); - __builtin_memcpy(ð_hdr->h_dest, fib_params.dmac, sizeof(eth_hdr->h_dest)); + __builtin_memcpy(ð_hdr->h_source, fib_params(ctx)->smac, sizeof(eth_hdr->h_source)); + __builtin_memcpy(ð_hdr->h_dest, fib_params(ctx)->dmac, sizeof(eth_hdr->h_dest)); // Redirect the packet. - CALI_DEBUG("Got Linux FIB hit, redirecting to iface %d.\n", fib_params.ifindex); - rc = bpf_redirect(fib_params.ifindex, 0); + CALI_DEBUG("Got Linux FIB hit, redirecting to iface %d.\n", fib_params(ctx)->ifindex); + rc = bpf_redirect(fib_params(ctx)->ifindex, 0); break; #ifdef BPF_CORE_SUPPORTED case BPF_FIB_LKUP_RET_NO_NEIGH: if (bpf_core_enum_value_exists(enum bpf_func_id, BPF_FUNC_redirect_neigh)) { - CALI_DEBUG("FIB lookup succeeded - not neigh - gw %x\n", bpf_ntohl(fib_params.ipv4_dst)); +#ifdef IPVER6 + CALI_DEBUG("FIB lookup succeeded - no neigh - gw\n"); +#else + CALI_DEBUG("FIB lookup succeeded - no neigh - gw %x\n", bpf_ntohl(fib_params(ctx)->ipv4_dst)); +#endif - if (!fib_approve(ctx, fib_params.ifindex)) { + if (!fib_approve(ctx, fib_params(ctx)->ifindex)) { reason = CALI_REASON_WEP_NOT_READY; goto deny; } struct bpf_redir_neigh nh_params = {}; - nh_params.nh_family = fib_params.family; - nh_params.ipv4_nh = fib_params.ipv4_dst; + nh_params.nh_family = fib_params(ctx)->family; +#ifdef IPVER6 + __builtin_memcpy(nh_params.ipv6_nh, fib_params(ctx)->ipv6_dst, sizeof(nh_params.ipv6_nh)); +#else + nh_params.ipv4_nh = fib_params(ctx)->ipv4_dst; +#endif - CALI_DEBUG("Got Linux FIB hit, redirecting to iface %d.\n", fib_params.ifindex); - rc = bpf_redirect_neigh(fib_params.ifindex, &nh_params, sizeof(nh_params), 0); + CALI_DEBUG("Got Linux FIB hit, redirecting to iface %d.\n", fib_params(ctx)->ifindex); + rc = bpf_redirect_neigh(fib_params(ctx)->ifindex, &nh_params, sizeof(nh_params), 0); break; } else { /* fallthrough to handling error */ } -#endif +#endif /* BPF_CORE_SUPPORTED */ default: if (rc < 0) { @@ -247,7 +268,11 @@ static CALI_BPF_INLINE int forward_or_drop(struct cali_tc_ctx *ctx) /* now we know we will bypass IP stack and ip->ttl > 1, decrement it! */ if (rc == TC_ACT_REDIRECT) { +#ifdef IPVER6 + ip_hdr(ctx)->hop_limit--; +#else ip_dec_ttl(ip_hdr(ctx)); +#endif } } diff --git a/felix/bpf-gpl/ip_addr.h b/felix/bpf-gpl/ip_addr.h index eb405e88497..847ece07f39 100644 --- a/felix/bpf-gpl/ip_addr.h +++ b/felix/bpf-gpl/ip_addr.h @@ -23,20 +23,20 @@ static CALI_BPF_INLINE bool ipv6_addr_t_eq(ipv6_addr_t x, ipv6_addr_t y) return x.a == y.a && x.b == y.b && x.c == y.c && x.d == y.d; } -static CALI_BPF_INLINE int ipv6_addr_t_cmp(ipv6_addr_t x, ipv6_addr_t y) +static CALI_BPF_INLINE int ipv6_addr_t_cmp(ipv6_addr_t *x, ipv6_addr_t *y) { - if (x.a < y.a) { + if (x->a < y->a) { return -1; - } else if (x.a == y.a) { - if (x.b < y.b) { + } else if (x->a == y->a) { + if (x->b < y->b) { return -1; - } else if (x.b == y.b) { - if (x.c < y.c) { + } else if (x->b == y->b) { + if (x->c < y->c) { return -1; - } else if (x.c == y.c) { - if (x.d < y.d) { + } else if (x->c == y->c) { + if (x->d < y->d) { return -1; - } else if (x.d == y.d) { + } else if (x->d == y->d) { return 0; } } @@ -74,6 +74,30 @@ static CALI_BPF_INLINE void ipv6_addr_t_to_ipv6hdr_ip(struct in6_addr *lnx, ipv6 lnx->in6_u.u6_addr32[3] = us->d; } +static CALI_BPF_INLINE void ipv6hdr_ip_to_be32_4_ip(__be32 *bpf, struct in6_addr *lnx) +{ + bpf[0] = lnx->in6_u.u6_addr32[0]; + bpf[1] = lnx->in6_u.u6_addr32[1]; + bpf[2] = lnx->in6_u.u6_addr32[2]; + bpf[3] = lnx->in6_u.u6_addr32[3]; +} + +static CALI_BPF_INLINE void ipv6_addr_t_to_be32_4_ip(__be32 *bpf, ipv6_addr_t *us) +{ + bpf[0] = us->a; + bpf[1] = us->b; + bpf[2] = us->c; + bpf[3] = us->d; +} + +static CALI_BPF_INLINE void be32_4_ip_to_ipv6_addr_t(ipv6_addr_t *us, __be32 *bpf) +{ + us->a = bpf[0]; + us->b = bpf[1]; + us->c = bpf[2]; + us->d = bpf[3]; +} + typedef ipv6_addr_t ipv46_addr_t; #define DECLARE_IP_ADDR(name) ipv6_addr_t name @@ -85,7 +109,7 @@ typedef ipv6_addr_t ipv46_addr_t; #define ip_set_void(ip) ((ip) = 0) #define NP_SPECIAL_IP 0xffffffff #define ip_equal(a, b) ((a) == (b)) -#define ip_lt(a, b) ((a) < (b)) +#define ip_lt(a, b) (*(a) < *(b)) typedef ipv4_addr_t ipv46_addr_t; diff --git a/felix/bpf-gpl/jump.h b/felix/bpf-gpl/jump.h index bfc269d4309..148acc06848 100644 --- a/felix/bpf-gpl/jump.h +++ b/felix/bpf-gpl/jump.h @@ -54,11 +54,7 @@ CALI_MAP_V1(cali_jump_map, BPF_MAP_TYPE_PROG_ARRAY, __u32, __u32, 200, 0) bpf_tail_call((ctx)->skb, &cali_jump_map, (ctx)->globals->jumps[PROG_PATH(index)]); \ } while (0) -#ifdef IPVER6 -#define CALI_JUMP_TO(ctx, index) __CALI_JUMP_TO(ctx, index ## _V6) -#else #define CALI_JUMP_TO(ctx, index) __CALI_JUMP_TO(ctx, index) -#endif #endif @@ -81,24 +77,6 @@ enum cali_jump_index { PROG_INDEX_HOST_CT_CONFLICT_DEBUG, PROG_INDEX_ICMP_INNER_NAT_DEBUG, PROG_INDEX_NEW_FLOW_DEBUG, - - PROG_INDEX_MAIN_V6, - PROG_INDEX_POLICY_V6, - PROG_INDEX_ALLOWED_V6, - PROG_INDEX_ICMP_V6, - PROG_INDEX_DROP_V6, - PROG_INDEX_HOST_CT_CONFLICT_V6, - PROG_INDEX_ICMP_INNER_NAT_V6, - PROG_INDEX_NEW_FLOW_V6, - - PROG_INDEX_MAIN_V6_DEBUG, - PROG_INDEX_POLICY_V6_DEBUG, - PROG_INDEX_ALLOWED_V6_DEBUG, - PROG_INDEX_ICMP_V6_DEBUG, - PROG_INDEX_DROP_V6_DEBUG, - PROG_INDEX_HOST_CT_CONFLICT_V6_DEBUG, - PROG_INDEX_ICMP_INNER_NAT_V6_DEBUG, - PROG_INDEX_NEW_FLOW_V6_DEBUG, }; #if CALI_F_XDP @@ -127,14 +105,8 @@ CALI_MAP_V1(cali_jump_prog_map, BPF_MAP_TYPE_PROG_ARRAY, __u32, __u32, 10000, 0) bpf_tail_call((ctx)->skb, &cali_jump_prog_map, (ctx)->globals->jumps[pol]); \ } while (0) -#ifdef IPVER6 -#define CALI_JUMP_TO_POLICY(ctx) \ - __CALI_JUMP_TO_POLICY(ctx, PROG_INDEX_ALLOWED_V6, PROG_INDEX_DROP_V6, PROG_INDEX_POLICY_V6) -#else #define CALI_JUMP_TO_POLICY(ctx) \ __CALI_JUMP_TO_POLICY(ctx, PROG_INDEX_ALLOWED, PROG_INDEX_DROP, PROG_INDEX_POLICY) #endif -#endif - #endif /* __CALI_BPF_JUMP_H__ */ diff --git a/felix/bpf-gpl/list-objs b/felix/bpf-gpl/list-objs index 2c1eb877b2c..e2bf62e0eaf 100755 --- a/felix/bpf-gpl/list-objs +++ b/felix/bpf-gpl/list-objs @@ -22,7 +22,9 @@ emit_filename() { for log_level in debug info no_log; do echo "bin/connect_time_${log_level}_v4.o" echo "bin/connect_time_${log_level}_v6.o" + echo "bin/connect_time_${log_level}_v46.o" echo "bin/connect_time_${log_level}_v4_co-re.o" + echo "bin/connect_time_${log_level}_v46_co-re.o" echo "bin/connect_time_${log_level}_v6_co-re.o" echo "bin/xdp_${log_level}.o" diff --git a/felix/bpf-gpl/nat6.h b/felix/bpf-gpl/nat6.h index d6b0ede2187..f2e909d10ab 100644 --- a/felix/bpf-gpl/nat6.h +++ b/felix/bpf-gpl/nat6.h @@ -2,8 +2,8 @@ // Copyright (c) 2020-2023 Tigera, Inc. All rights reserved. // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later -#ifndef __CALI_NAT4_H__ -#define __CALI_NAT4_H__ +#ifndef __CALI_NAT6_H__ +#define __CALI_NAT6_H__ #include @@ -110,4 +110,4 @@ static CALI_BPF_INLINE bool vxlan_vni_is_valid(struct cali_tc_ctx *ctx) return *((__u8*)&vxlan->flags) & (1 << 3); } -#endif /* __CALI_NAT4_H__ */ +#endif /* __CALI_NAT6_H__ */ diff --git a/felix/bpf-gpl/parsing.h b/felix/bpf-gpl/parsing.h index 41103faf926..b135a75ad41 100644 --- a/felix/bpf-gpl/parsing.h +++ b/felix/bpf-gpl/parsing.h @@ -173,6 +173,12 @@ static CALI_BPF_INLINE int tc_state_fill_from_nexthdr(struct cali_tc_ctx *ctx, b } } break; +#ifdef IPVER6 + case IPPROTO_ICMPV6: + /* XXX for now, just allow */ + CALI_DEBUG("ICMPv6: allow"); + goto allow; +#else case IPPROTO_ICMP: ctx->state->icmp_type = icmp_hdr(ctx)->type; ctx->state->icmp_code = icmp_hdr(ctx)->code; @@ -180,6 +186,7 @@ static CALI_BPF_INLINE int tc_state_fill_from_nexthdr(struct cali_tc_ctx *ctx, b CALI_DEBUG("ICMP; type=%d code=%d\n", icmp_hdr(ctx)->type, icmp_hdr(ctx)->code); break; +#endif case IPPROTO_IPIP: if (CALI_F_TUNNEL | CALI_F_L3_DEV) { // IPIP should never be sent down the tunnel. diff --git a/felix/bpf-gpl/parsing6.h b/felix/bpf-gpl/parsing6.h index 85fd3f3a3fc..40bbbaefdc4 100644 --- a/felix/bpf-gpl/parsing6.h +++ b/felix/bpf-gpl/parsing6.h @@ -41,6 +41,9 @@ static CALI_BPF_INLINE int parse_packet_ip_v6(struct cali_tc_ctx *ctx) { switch (protocol) { case ETH_P_IPV6: break; + case ETH_P_IP: + CALI_DEBUG("Unexpected ipv4 packet, drop\n"); + goto deny; default: if (CALI_F_WEP) { CALI_DEBUG("Unknown ethertype (%x), drop\n", protocol); @@ -162,7 +165,7 @@ static CALI_BPF_INLINE void tc_state_fill_from_iphdr_v6(struct cali_tc_ctx *ctx) } out: - CALI_DEBUG("IP ihl=%d bytes\n", ctx->ipheader_len); + CALI_DEBUG("IP ihl=%d bytes ip nexthdr %d\n", ctx->ipheader_len, ctx->state->ip_proto); return; deny: diff --git a/felix/bpf-gpl/policy.h b/felix/bpf-gpl/policy.h index a1f1bfb3034..c41489c226e 100644 --- a/felix/bpf-gpl/policy.h +++ b/felix/bpf-gpl/policy.h @@ -24,20 +24,30 @@ struct cidr { // WARNING: must be kept in sync with the definitions in bpf/polprog/pol_prog_builder.go. // WARNING: must be kept in sync with the definitions in bpf/ipsets/map.go. -struct ip4_set_key { +struct ip_set_key { __u32 mask; __be64 set_id; - __be32 addr; + ipv46_addr_t addr; __u16 port; __u8 protocol; __u8 pad; } __attribute__((packed)); -union ip4_set_lpm_key { +union ip_set_lpm_key { struct bpf_lpm_trie_key lpm; - struct ip4_set_key ip; + struct ip_set_key ip; }; -CALI_MAP_V1(cali_v4_ip_sets, BPF_MAP_TYPE_LPM_TRIE, union ip4_set_lpm_key, __u32, 1024*1024, BPF_F_NO_PREALLOC) + +#ifdef IPVER6 +CALI_MAP_NAMED(cali_v6_ip_sets, cali_ip_sets,, +#else +CALI_MAP_NAMED(cali_v4_ip_sets, cali_ip_sets,, +#endif + BPF_MAP_TYPE_LPM_TRIE, + union ip_set_lpm_key, + __u32, + 1024*1024, + BPF_F_NO_PREALLOC) #define RULE_START(id) diff --git a/felix/bpf-gpl/rpf.h b/felix/bpf-gpl/rpf.h index 5fc95de123f..a8c79dd482e 100644 --- a/felix/bpf-gpl/rpf.h +++ b/felix/bpf-gpl/rpf.h @@ -32,9 +32,6 @@ static CALI_BPF_INLINE bool wep_rpf_check(struct cali_tc_ctx *ctx, struct cali_r static CALI_BPF_INLINE bool hep_rpf_check(struct cali_tc_ctx *ctx) { -#ifdef IPVER6 - return true; -#else bool ret = false; bool strict; @@ -45,7 +42,11 @@ static CALI_BPF_INLINE bool hep_rpf_check(struct cali_tc_ctx *ctx) strict = GLOBAL_FLAGS & CALI_GLOBALS_RPF_OPTION_STRICT; struct bpf_fib_lookup fib_params = { +#ifdef IPVER6 + .family = 10, /* AF_INET6 */ +#else .family = 2, /* AF_INET */ +#endif .tot_len = 0, .ifindex = ctx->skb->ingress_ifindex, .l4_protocol = ctx->state->ip_proto, @@ -56,8 +57,13 @@ static CALI_BPF_INLINE bool hep_rpf_check(struct cali_tc_ctx *ctx) /* set the ipv4 here, otherwise the ipv4/6 unions do not get * zeroed properly */ +#ifdef IPVER6 + ipv6_addr_t_to_be32_4_ip(fib_params.ipv6_src, &ctx->state->ip_dst); + ipv6_addr_t_to_be32_4_ip(fib_params.ipv6_dst, &ctx->state->ip_src); +#else fib_params.ipv4_src = ctx->state->ip_dst; fib_params.ipv4_dst = ctx->state->ip_src; +#endif int rc = bpf_fib_lookup(ctx->skb, &fib_params, sizeof(fib_params), 0); switch(rc) { @@ -65,20 +71,30 @@ static CALI_BPF_INLINE bool hep_rpf_check(struct cali_tc_ctx *ctx) case BPF_FIB_LKUP_RET_NO_NEIGH: if (strict) { ret = ctx->skb->ingress_ifindex == fib_params.ifindex; +#ifdef IPVER6 + CALI_DEBUG("Host RPF check skb strict if %d\n", fib_params.ifindex); +#else CALI_DEBUG("Host RPF check src=%x skb strict if %d\n", debug_ip(ctx->state->ip_src), fib_params.ifindex); +#endif } else { ret = fib_params.ifindex != CT_INVALID_IFINDEX; +#ifdef IPVER6 + CALI_DEBUG("Host RPF check skb loose if %d\n", fib_params.ifindex); +#else CALI_DEBUG("Host RPF check src=%x skb loose if %d\n", debug_ip(ctx->state->ip_src), fib_params.ifindex); +#endif } } +#ifdef IPVER6 + CALI_DEBUG("Host RPF check skb iface=%d\n", ctx->skb->ifindex); +#else CALI_DEBUG("Host RPF check src=%x skb iface=%d\n", debug_ip(ctx->state->ip_src), ctx->skb->ifindex); +#endif CALI_DEBUG("Host RPF check rc %d result %d\n", rc, ret); - return ret; -#endif } #endif /* __CALI_FIB_H__ */ diff --git a/felix/bpf-gpl/sendrecv.h b/felix/bpf-gpl/sendrecv.h index 1a69cb59ef2..09b3061ded7 100644 --- a/felix/bpf-gpl/sendrecv.h +++ b/felix/bpf-gpl/sendrecv.h @@ -9,6 +9,9 @@ struct sendrec_key { __u64 cookie; ipv46_addr_t ip; __u32 port; /* because bpf_sock_addr uses 32bit and we would need padding */ +#ifdef IPVER6 + __u8 pad[4]; +#endif }; struct sendrec_val { @@ -30,7 +33,11 @@ struct ct_nats_key { ipv46_addr_t ip; __u32 port; /* because bpf_sock_addr uses 32bit */ __u8 proto; +#ifdef IPVER6 + __u8 pad[3]; +#else __u8 pad[7]; +#endif }; #ifdef IPVER6 diff --git a/felix/bpf-gpl/tc_preamble.c b/felix/bpf-gpl/tc_preamble.c index 5ec06c081e2..fa0278cc0dc 100644 --- a/felix/bpf-gpl/tc_preamble.c +++ b/felix/bpf-gpl/tc_preamble.c @@ -16,13 +16,12 @@ const volatile struct cali_tc_globals __globals; #ifdef IPVER6 #define IPV " v6" -#define JUMP_IDX(idx) (idx ## _V6) -#define JUMP_IDX_DEBUG(idx) (idx ## _V6_DEBUG) #else #define IPV " v4" +#endif + #define JUMP_IDX(idx) (idx) #define JUMP_IDX_DEBUG(idx) (idx ## _DEBUG) -#endif #define JUMP(idx) globals->jumps[JUMP_IDX(idx)] #define JUMP_DEBUG(idx) globals->jumps[JUMP_IDX_DEBUG(idx)] diff --git a/felix/bpf-gpl/types.h b/felix/bpf-gpl/types.h index 1b3d2fee362..4633b1c28bb 100644 --- a/felix/bpf-gpl/types.h +++ b/felix/bpf-gpl/types.h @@ -205,6 +205,8 @@ struct cali_tc_ctx { x; \ }) \ +#define fib_params(x) ((struct bpf_fib_lookup *)((x)->scratch)) + #ifdef IPVER6 static CALI_BPF_INLINE struct ipv6hdr* ip_hdr(struct cali_tc_ctx *ctx) { diff --git a/felix/bpf/ipsets/map6.go b/felix/bpf/ipsets/map6.go index 006a1d3901c..0d16247bb39 100644 --- a/felix/bpf/ipsets/map6.go +++ b/felix/bpf/ipsets/map6.go @@ -74,7 +74,7 @@ func (e IPSetEntryV6) PrefixLen() uint32 { } func (e IPSetEntryV6) Protocol() uint8 { - return e[20] + return e[30] } func (e IPSetEntryV6) Port() uint16 { @@ -101,7 +101,7 @@ func MakeBPFIPSetEntryV6(setID uint64, cidr ip.V6CIDR, port uint16, proto uint8) ipv6 := cidr.Addr().(ip.V6Addr) copy(entry[12:28], ipv6[:]) binary.LittleEndian.PutUint16(entry[28:30], port) - entry[31] = proto + entry[30] = proto return entry } diff --git a/felix/bpf/nat/connecttime.go b/felix/bpf/nat/connecttime.go index b6ef5c44965..3eec41a4e90 100644 --- a/felix/bpf/nat/connecttime.go +++ b/felix/bpf/nat/connecttime.go @@ -95,12 +95,7 @@ func installProgram(name, ipver, bpfMount, cgroupPath, logLevel string, udpNotSe progPinDir := path.Join(bpfMount, "calico_connect4") _ = os.RemoveAll(progPinDir) - var filename string - if ipver == "6" { - filename = path.Join(bpfdefs.ObjectDir, ProgFileName(logLevel, 6)) - } else { - filename = path.Join(bpfdefs.ObjectDir, ProgFileName(logLevel, 4)) - } + filename := path.Join(bpfdefs.ObjectDir, ProgFileName(logLevel, ipver)) progName := "calico_" + name + "_v" + ipver @@ -153,7 +148,7 @@ func installProgram(name, ipver, bpfMount, cgroupPath, logLevel string, udpNotSe return nil } -func InstallConnectTimeLoadBalancer(cgroupv2 string, logLevel string, udpNotSeen time.Duration, excludeUDP bool) error { +func InstallConnectTimeLoadBalancer(ipFamily int, cgroupv2 string, logLevel string, udpNotSeen time.Duration, excludeUDP bool) error { bpfMount, err := utils.MaybeMountBPFfs() if err != nil { @@ -166,42 +161,64 @@ func InstallConnectTimeLoadBalancer(cgroupv2 string, logLevel string, udpNotSeen return errors.Wrap(err, "failed to set-up cgroupv2") } - err = installProgram("connect", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, excludeUDP) - if err != nil { - return err - } - - err = installProgram("connect", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, excludeUDP) - if err != nil { - return err - } - - if !excludeUDP { - err = installProgram("sendmsg", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + switch ipFamily { + case 4: + err = installProgram("connect", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, excludeUDP) if err != nil { return err } - err = installProgram("recvmsg", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + err = installProgram("connect", "46", bpfMount, cgroupPath, logLevel, udpNotSeen, excludeUDP) if err != nil { return err } - err = installProgram("sendmsg", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if !excludeUDP { + err = installProgram("sendmsg", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } + + err = installProgram("recvmsg", "4", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } + + err = installProgram("sendmsg", "46", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } + + err = installProgram("recvmsg", "46", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } + } + case 6: + err = installProgram("connect", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, excludeUDP) if err != nil { return err } - err = installProgram("recvmsg", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, false) - if err != nil { - return err + if !excludeUDP { + err = installProgram("sendmsg", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } + + err = installProgram("recvmsg", "6", bpfMount, cgroupPath, logLevel, udpNotSeen, false) + if err != nil { + return err + } } + default: + return fmt.Errorf("unrecognized ip family %d", ipFamily) } return nil } -func ProgFileName(logLevel string, ipver int) string { +func ProgFileName(logLevel string, ipver string) string { logLevel = strings.ToLower(logLevel) if logLevel == "off" { logLevel = "no_log" @@ -212,15 +229,7 @@ func ProgFileName(logLevel string, ipver int) string { btf = "_co-re" } - switch ipver { - case 4: - return fmt.Sprintf("connect_time_%s_v4%s.o", logLevel, btf) - case 6: - return fmt.Sprintf("connect_time_%s_v6%s.o", logLevel, btf) - } - - log.WithField("ipver", ipver).Fatal("Invalid IP version") - return "" + return fmt.Sprintf("connect_time_%s_v%s%s.o", logLevel, ipver, btf) } func ensureCgroupPath(cgroupv2 string) (string, error) { diff --git a/felix/bpf/polprog/pol_prog_builder.go b/felix/bpf/polprog/pol_prog_builder.go index e8a550e9182..3c473933f04 100644 --- a/felix/bpf/polprog/pol_prog_builder.go +++ b/felix/bpf/polprog/pol_prog_builder.go @@ -94,9 +94,14 @@ const ( var ( // Stack offsets. These are defined locally. - offStateKey = nextOffset(4, 4) - offSrcIPSetKey = nextOffset(ipsets.IPSetEntrySize, 8) - offDstIPSetKey = nextOffset(ipsets.IPSetEntrySize, 8) + offStateKey = nextOffset(4, 4) + // Even for v4 progrtams, we have the v6 layout + // N.B. we can use 64bit stack stores in ipv6 because of the 4 byte alignment + // preceded by the 4 bytes of StateKey. That makes the ip within the src key + // 8 bytes aligned. And since the ip is followed by 4 bytes of + // port+proto+pad, the dst key is also aligned in the same way. + offSrcIPSetKey = nextOffset(ipsets.IPSetEntryV6Size, 4) + offDstIPSetKey = nextOffset(ipsets.IPSetEntryV6Size, 4) // Offsets within the cal_tc_state struct. // WARNING: must be kept in sync with the definitions in bpf-gpl/types.h. @@ -126,8 +131,8 @@ var ( skbCb0 = FieldOffset{Offset: 12*4 + 0*4, Field: "skb->cb[0]"} skbCb1 = FieldOffset{Offset: 12*4 + 1*4, Field: "skb->cb[1]"} - // Compile-time check that IPSetEntrySize hasn't changed; if it changes, the code will need to change. - _ = [1]struct{}{{}}[20-ipsets.IPSetEntrySize] + // Compile-time check that IPSetEntryV6Size hasn't changed; if it changes, the code will need to change. + _ = [1]struct{}{{}}[32-ipsets.IPSetEntryV6Size] // Offsets within struct ip4_set_key. // WARNING: must be kept in sync with the definitions in bpf/ipsets/map.go. @@ -203,10 +208,6 @@ const ( TierEndPass TierEndAction = "pass" ) -func (p *Builder) EnableIPv6Mode() { - p.forIPv6 = true -} - func (p *Builder) Instructions(rules Rules) (Insns, error) { p.b = NewBlock(p.policyDebugEnabled) p.writeProgramHeader() @@ -406,20 +407,38 @@ func (p *Builder) writeRecordRuleHit(r Rule, skipLabel string) { } func (p *Builder) setUpIPSetKey(ipsetID uint64, keyOffset int16, ipOffset, portOffset FieldOffset) { + v6Adjust := int16(0) + prefixLen := int32(128) + + if p.forIPv6 { + // IPv6 addresses are 12 bytes longer and so everything beyond the + // address is shifted by 12 bytes. + v6Adjust = 12 + prefixLen += 96 + } + // TODO track whether we've already done an initialisation and skip the parts that don't change. // Zero the padding. p.b.MovImm64(R1, 0) // R1 = 0 - p.b.StoreStack8(R1, keyOffset+ipsKeyPad) - p.b.MovImm64(R1, 128) // R1 = 128 + p.b.StoreStack8(R1, keyOffset+ipsKeyPad+v6Adjust) + p.b.MovImm64(R1, prefixLen) // R1 = 128 p.b.StoreStack32(R1, keyOffset+ipsKeyPrefix) // Store the IP address, port and protocol. - p.b.Load32(R1, R9, ipOffset) - p.b.StoreStack32(R1, keyOffset+ipsKeyAddr) + if !p.forIPv6 { + p.b.Load32(R1, R9, ipOffset) + p.b.StoreStack32(R1, keyOffset+ipsKeyAddr) + } else { + p.b.Load64(R1, R9, ipOffset) + p.b.StoreStack64(R1, keyOffset+ipsKeyAddr) + ipOffset.Offset += 8 + p.b.Load64(R1, R9, ipOffset) + p.b.StoreStack64(R1, keyOffset+ipsKeyAddr+8) + } p.b.Load16(R1, R9, portOffset) - p.b.StoreStack16(R1, keyOffset+ipsKeyPort) + p.b.StoreStack16(R1, keyOffset+ipsKeyPort+v6Adjust) p.b.Load8(R1, R9, stateOffIPProto) - p.b.StoreStack8(R1, keyOffset+ipsKeyProto) + p.b.StoreStack8(R1, keyOffset+ipsKeyProto+v6Adjust) // Store the IP set ID. It is 64-bit but, since it's a packed struct, we have to write it in two // 32-bit chunks. @@ -856,9 +875,9 @@ func (p *Builder) writeIPSetMatch(negate bool, leg matchLeg, ipSets []string) { } comment := "" if negate { - comment = fmt.Sprintf("If %s matches ipset %s, skip to next rule", leg, ipSetID) + comment = fmt.Sprintf("If %s matches ipset %s (0x%x), skip to next rule", leg, ipSetID, id) } else { - comment = fmt.Sprintf("If %s doesn't match ipset %s, skip to next rule", leg, ipSetID) + comment = fmt.Sprintf("If %s doesn't match ipset %s (0x%x), skip to next rule", leg, ipSetID, id) } p.b.AddComment(comment) @@ -894,9 +913,9 @@ func (p *Builder) writeIPSetOrMatch(leg matchLeg, ipSets []string) { comment := "" if len(ipSets) == 1 { - comment = fmt.Sprintf("If %s doesn't match ipset %s, skip to next rule", leg, ipSetID) + comment = fmt.Sprintf("If %s doesn't match ipset %s (0x%x), skip to next rule", leg, ipSetID, id) } else { - comment = fmt.Sprintf("If %s doesn't match ipset %s, jump to next ipset", leg, ipSetID) + comment = fmt.Sprintf("If %s doesn't match ipset %s (0x%x), jump to next ipset", leg, ipSetID, id) } p.b.AddComment(comment) @@ -1062,6 +1081,12 @@ func WithAllowDenyJumps(allow, deny int) Option { } } +func WithIPv6() Option { + return func(p *Builder) { + p.forIPv6 = true + } +} + func protocolToName(protocol *proto.Protocol) string { var pcol string switch p := protocol.NumberOrName.(type) { diff --git a/felix/bpf/polprog/pol_prog_builder_test.go b/felix/bpf/polprog/pol_prog_builder_test.go index 522acf7a78b..ec73370054c 100644 --- a/felix/bpf/polprog/pol_prog_builder_test.go +++ b/felix/bpf/polprog/pol_prog_builder_test.go @@ -152,10 +152,10 @@ func TestPolicyDump(t *testing.T) { checkLabelsAndComments(proto.Rule{NotSrcNamedPortIpSetIds: []string{setID("n:abcdef1234567890")}}, "If source port is within any of the named ports {n:abcdef1234567890}, skip to next rule", "comment") checkLabelsAndComments(proto.Rule{NotDstNamedPortIpSetIds: []string{setID("n:foo1234567890")}}, "If dest port is within any of the named ports {n:foo1234567890}, skip to next rule", "comment") - checkLabelsAndComments(proto.Rule{SrcIpSetIds: []string{setID("s:sbcdef1234567890")}}, "If source doesn't match ipset s:sbcdef1234567890, skip to next rule", "comment") - checkLabelsAndComments(proto.Rule{NotSrcIpSetIds: []string{setID("s:sbcdef1234567890")}}, "If source matches ipset s:sbcdef1234567890, skip to next rule", "comment") - checkLabelsAndComments(proto.Rule{DstIpSetIds: []string{setID("d:sbcdef1234567890")}}, "If dest doesn't match ipset d:sbcdef1234567890, skip to next rule", "comment") - checkLabelsAndComments(proto.Rule{NotDstIpSetIds: []string{setID("d:sbcdef1234567890")}}, "If dest matches ipset d:sbcdef1234567890, skip to next rule", "comment") + checkLabelsAndComments(proto.Rule{SrcIpSetIds: []string{setID("s:sbcdef1234567890")}}, "If source doesn't match ipset s:sbcdef1234567890 (0xc9e0b8362d2ae7aa), skip to next rule", "comment") + checkLabelsAndComments(proto.Rule{NotSrcIpSetIds: []string{setID("s:sbcdef1234567890")}}, "If source matches ipset s:sbcdef1234567890 (0xc9e0b8362d2ae7aa), skip to next rule", "comment") + checkLabelsAndComments(proto.Rule{DstIpSetIds: []string{setID("d:sbcdef1234567890")}}, "If dest doesn't match ipset d:sbcdef1234567890 (0x8cc518c2047a26bb), skip to next rule", "comment") + checkLabelsAndComments(proto.Rule{NotDstIpSetIds: []string{setID("d:sbcdef1234567890")}}, "If dest matches ipset d:sbcdef1234567890 (0x8cc518c2047a26bb), skip to next rule", "comment") checkLabelsAndComments(proto.Rule{Icmp: &proto.Rule_IcmpTypeCode{IcmpTypeCode: &proto.IcmpTypeAndCode{Type: 10, Code: 12}}}, "If ICMP type != 10 or code != 12, skip to next rule", "comment") checkLabelsAndComments(proto.Rule{NotIcmp: &proto.Rule_NotIcmpTypeCode{NotIcmpTypeCode: &proto.IcmpTypeAndCode{Type: 10, Code: 12}}}, "If ICMP type == 10 and code == 12, skip to next rule", "comment") diff --git a/felix/bpf/ut/bpf_prog_test.go b/felix/bpf/ut/bpf_prog_test.go index bb5a4967a0d..2bd93a7efdd 100644 --- a/felix/bpf/ut/bpf_prog_test.go +++ b/felix/bpf/ut/bpf_prog_test.go @@ -211,24 +211,24 @@ var tcJumpMapIndexes = map[string][]int{ tcdefs.ProgIndexNewFlowDebug, }, "IPv6": []int{ - tcdefs.ProgIndexV6Main, - tcdefs.ProgIndexV6Policy, - tcdefs.ProgIndexV6Allowed, - tcdefs.ProgIndexV6Icmp, - tcdefs.ProgIndexV6Drop, - tcdefs.ProgIndexV6HostCtConflict, - tcdefs.ProgIndexV6IcmpInnerNat, - tcdefs.ProgIndexV6NewFlow, + tcdefs.ProgIndexMain, + tcdefs.ProgIndexPolicy, + tcdefs.ProgIndexAllowed, + tcdefs.ProgIndexIcmp, + tcdefs.ProgIndexDrop, + tcdefs.ProgIndexHostCtConflict, + tcdefs.ProgIndexIcmpInnerNat, + tcdefs.ProgIndexNewFlow, }, "IPv6 debug": []int{ - tcdefs.ProgIndexV6MainDebug, - tcdefs.ProgIndexV6PolicyDebug, - tcdefs.ProgIndexV6AllowedDebug, - tcdefs.ProgIndexV6IcmpDebug, - tcdefs.ProgIndexV6DropDebug, - tcdefs.ProgIndexV6HostCtConflictDebug, - tcdefs.ProgIndexV6IcmpInnerNatDebug, - tcdefs.ProgIndexV6NewFlowDebug, + tcdefs.ProgIndexMainDebug, + tcdefs.ProgIndexPolicyDebug, + tcdefs.ProgIndexAllowedDebug, + tcdefs.ProgIndexIcmpDebug, + tcdefs.ProgIndexDropDebug, + tcdefs.ProgIndexHostCtConflictDebug, + tcdefs.ProgIndexIcmpInnerNatDebug, + tcdefs.ProgIndexNewFlowDebug, }, } @@ -357,7 +357,6 @@ func setupAndRun(logger testLogger, loglevel, section string, rules *polprog.Rul if topts.ipv6 { ipFamily = "IPv6" obj += "_v6" - policyIdx = tcdefs.ProgIndexV6Policy } if topts.xdp { @@ -527,10 +526,10 @@ func bpftool(args ...string) ([]byte, error) { var ( mapInitOnce sync.Once - natMap, natBEMap, ctMap, rtMap, ipsMap, testStateMap, affinityMap, arpMap, fsafeMap maps.Map - natMapV6, natBEMapV6, ctMapV6, rtMapV6, affinityMapV6, arpMapV6 maps.Map - stateMap, countersMap, ifstateMap, progMap, progMapXDP, jumpMap, jumpMapXDP maps.Map - allMaps []maps.Map + natMap, natBEMap, ctMap, rtMap, ipsMap, testStateMap, affinityMap, arpMap, fsafeMap maps.Map + natMapV6, natBEMapV6, ctMapV6, rtMapV6, ipsMapV6, affinityMapV6, arpMapV6, fsafeMapV6 maps.Map + stateMap, countersMap, ifstateMap, progMap, progMapXDP, jumpMap, jumpMapXDP maps.Map + allMaps []maps.Map ) func initMapsOnce() { @@ -544,6 +543,7 @@ func initMapsOnce() { rtMap = routes.Map() rtMapV6 = routes.MapV6() ipsMap = ipsets.Map() + ipsMapV6 = ipsets.MapV6() stateMap = state.Map() testStateMap = state.MapForTest() affinityMap = nat.AffinityMap() @@ -551,11 +551,13 @@ func initMapsOnce() { arpMap = arp.Map() arpMapV6 = arp.MapV6() fsafeMap = failsafes.Map() + fsafeMapV6 = failsafes.MapV6() countersMap = counters.Map() ifstateMap = ifstate.Map() - allMaps = []maps.Map{natMap, natBEMap, natMapV6, natBEMapV6, ctMap, ctMapV6, rtMap, rtMapV6, ipsMap, - stateMap, testStateMap, affinityMap, affinityMapV6, arpMap, arpMapV6, fsafeMap, countersMap, ifstateMap} + allMaps = []maps.Map{natMap, natBEMap, natMapV6, natBEMapV6, ctMap, ctMapV6, rtMap, rtMapV6, ipsMap, ipsMapV6, + stateMap, testStateMap, affinityMap, affinityMapV6, arpMap, arpMapV6, fsafeMap, fsafeMapV6, + countersMap, ifstateMap} for _, m := range allMaps { err := m.EnsureExists() if err != nil { @@ -625,22 +627,14 @@ func tcUpdateJumpMap(obj *libbpf.Obj, progs []int, hasPolicyProg, hasHostConflic switch idx { case tcdefs.ProgIndexPolicy, - tcdefs.ProgIndexPolicyDebug, - tcdefs.ProgIndexV6Policy, - tcdefs.ProgIndexV6PolicyDebug: + tcdefs.ProgIndexPolicyDebug: if !hasPolicyProg { continue } - case - tcdefs.ProgIndexV6Icmp, - tcdefs.ProgIndexV6IcmpDebug: - continue // XXX not implemented case tcdefs.ProgIndexHostCtConflict, - tcdefs.ProgIndexHostCtConflictDebug, - tcdefs.ProgIndexV6HostCtConflict, - tcdefs.ProgIndexV6HostCtConflictDebug: + tcdefs.ProgIndexHostCtConflictDebug: if !hasHostConflictProg { continue } @@ -775,10 +769,6 @@ func objLoad(fname, bpfFsDir, ipFamily string, topts testOpts, polProg, hasHostC progDir := bpfFsDir policyIdx := tcdefs.ProgIndexPolicy - if strings.HasPrefix(ipFamily, "IPv6") { - policyIdx = tcdefs.ProgIndexV6Policy - } - err = obj.PinPrograms(progDir) if err != nil { obj.Close() diff --git a/felix/bpf/ut/pol_prog_test.go b/felix/bpf/ut/pol_prog_test.go index a9ba1f0ec9a..4375dc058d3 100644 --- a/felix/bpf/ut/pol_prog_test.go +++ b/felix/bpf/ut/pol_prog_test.go @@ -121,6 +121,11 @@ func TestPolicyLoadKitchenSinkPolicy(t *testing.T) { return id } + jumpMap = jump.Map() + _ = unix.Unlink(jumpMap.Path()) + err := jumpMap.EnsureExists() + Expect(err).NotTo(HaveOccurred()) + cleanIPSetMap() pg := polprog.NewBuilder(alloc, ipsMap.MapFD(), stateMap.MapFD(), jumpMap.MapFD(), @@ -1575,6 +1580,28 @@ var polProgramTests = []polProgramTest{ "setA": {"10.0.0.0/8"}, }, }, + { + PolicyName: "allow from IP set - v6", + Policy: makeRulesSingleTier([]*proto.Rule{{ + Action: "Allow", + SrcIpSetIds: []string{"setA"}, + }}), + AllowedPackets: []packet{ + packetNoPorts(253, "10::2", "10::1"), + tcpPkt("[10::2]:80", "[10::1]:31245"), + udpPkt("[10::2]:12345", "[123::1]:1024"), + udpPkt("[10::2]:80", "[10::1]:31245"), + udpPkt("[10::1]:31245", "[10::2]:80"), + // icmpPkt("10::1", "10::2"), + }, + DroppedPackets: []packet{ + packetNoPorts(253, "11::2", "10::1"), + tcpPkt("[11::1]:12345", "[10::2]:8080")}, + IPSets: map[string][]string{ + "setA": {"10::0/16"}, + }, + ForIPv6: true, + }, { PolicyName: "allow to IP set", Policy: makeRulesSingleTier([]*proto.Rule{{ @@ -1592,6 +1619,24 @@ var polProgramTests = []polProgramTest{ "setA": {"11.0.0.0/8", "123.0.0.1/32"}, }, }, + { + PolicyName: "allow to IP set - v6", + Policy: makeRulesSingleTier([]*proto.Rule{{ + Action: "Allow", + DstIpSetIds: []string{"setA"}, + }}), + AllowedPackets: []packet{ + packetNoPorts(253, "11::2", "11::1"), + udpPkt("[10::2]:12345", "[123::1]:1024")}, + DroppedPackets: []packet{ + packetNoPorts(253, "11::2", "10::1"), + tcpPkt("[11::1]:12345", "[10::2]:8080"), + udpPkt("[10::1]:31245", "[10::2]:80")}, + IPSets: map[string][]string{ + "setA": {"11::0/16", "123::1/128"}, + }, + ForIPv6: true, + }, { PolicyName: "allow from !IP set", Policy: makeRulesSingleTier([]*proto.Rule{{ @@ -1670,6 +1715,28 @@ var polProgramTests = []polProgramTest{ "setB": {"123.0.0.1/32,udp:1024"}, }, }, + { + PolicyName: "allow to named ports - v6", + Policy: makeRulesSingleTier([]*proto.Rule{{ + Action: "Allow", + DstNamedPortIpSetIds: []string{"setA", "setB"}, + }}), + AllowedPackets: []packet{ + udpPkt("[10::2]:12345", "[123::1]:1024"), + tcpPkt("[10::1]:31245", "[10::2]:80")}, + DroppedPackets: []packet{ + packetNoPorts(253, "11::2", "10::2"), // Wrong proto, no ports + tcpPkt("[11::1]:12345", "[10::2]:8080"), // Wrong port + udpPkt("[10::1]:31245", "[10::2]:80"), // Wrong proto + tcpPkt("[10::2]:80", "[10::1]:31245"), // Src/dest confusion + tcpPkt("[10::2]:31245", "[10::1]:80"), // Wrong dest + }, + IPSets: map[string][]string{ + "setA": {"10::2/128,tcp:80"}, + "setB": {"123::1/128,udp:1024"}, + }, + ForIPv6: true, + }, { PolicyName: "allow to mixed ports", Policy: makeRulesSingleTier([]*proto.Rule{{ @@ -2400,10 +2467,14 @@ func runTest(t *testing.T, tp testPolicy) { forceAlloc := &forceAllocator{alloc: realAlloc} // Make sure the maps are available. - cleanIPSetMap() // FIXME should clean up the maps at the end of each test but recreating the maps seems to be racy - - setUpIPSets(tp.IPSets(), realAlloc, ipsMap) + if tp.ForIPv6() { + cleanIPSetMapV6() + setUpIPSetsV6(tp.IPSets(), realAlloc, ipsMapV6) + } else { + cleanIPSetMap() + setUpIPSets(tp.IPSets(), realAlloc, ipsMap) + } jumpMap = jump.Map() _ = unix.Unlink(jumpMap.Path()) @@ -2413,16 +2484,16 @@ func runTest(t *testing.T, tp testPolicy) { // Build the program. allowIdx := tcdefs.ProgIndexAllowed denyIdx := tcdefs.ProgIndexDrop - if tp.ForIPv6() { - allowIdx = tcdefs.ProgIndexV6Allowed - denyIdx = tcdefs.ProgIndexV6Drop - } - pg := polprog.NewBuilder(forceAlloc, ipsMap.MapFD(), testStateMap.MapFD(), jumpMap.MapFD(), - polprog.WithAllowDenyJumps(allowIdx, denyIdx)) + ipsfd := ipsMap.MapFD() + + opts := []polprog.Option{polprog.WithAllowDenyJumps(allowIdx, denyIdx)} if tp.ForIPv6() { - pg.EnableIPv6Mode() + opts = append(opts, polprog.WithIPv6()) + ipsfd = ipsMapV6.MapFD() } + + pg := polprog.NewBuilder(forceAlloc, ipsfd, testStateMap.MapFD(), jumpMap.MapFD(), opts...) insns, err := pg.Instructions(tp.Policy()) Expect(err).NotTo(HaveOccurred(), "failed to assemble program") @@ -2438,9 +2509,6 @@ func runTest(t *testing.T, tp testPolicy) { // Give the policy program somewhere to jump to. jumpMapIndex := tcdefs.ProgIndexAllowed - if tp.ForIPv6() { - jumpMapIndex = tcdefs.ProgIndexV6Allowed - } epiFD := installAllowedProgram(jumpMap, jumpMapIndex) defer func() { err := epiFD.Close() @@ -2448,9 +2516,6 @@ func runTest(t *testing.T, tp testPolicy) { }() jumpMapIndex = tcdefs.ProgIndexDrop - if tp.ForIPv6() { - jumpMapIndex = tcdefs.ProgIndexV6Drop - } dropFD := installDropProgram(jumpMap, jumpMapIndex) defer func() { err := dropFD.Close() @@ -2561,6 +2626,17 @@ func setUpIPSets(ipSets map[string][]string, alloc *idalloc.IDAllocator, ipsMap } } +func setUpIPSetsV6(ipSets map[string][]string, alloc *idalloc.IDAllocator, ipsMap maps.Map) { + for name, members := range ipSets { + id := alloc.GetOrAlloc(name) + for _, m := range members { + entry := ipsets.ProtoIPSetMemberToBPFEntryV6(id, m) + err := ipsMapV6.Update(entry.AsBytes(), ipsets.DummyValue) + Expect(err).NotTo(HaveOccurred()) + } + } +} + func cleanIPSetMap() { // Clean out any existing IP sets. (The other maps have a fixed number of keys that // we set as needed.) @@ -2577,3 +2653,20 @@ func cleanIPSetMap() { Expect(err).NotTo(HaveOccurred(), "failed to clean out map before test") } } + +func cleanIPSetMapV6() { + // Clean out any existing IP sets. (The other maps have a fixed number of keys that + // we set as needed.) + var keys [][]byte + err := ipsMapV6.Iter(func(k, v []byte) maps.IteratorAction { + kCopy := make([]byte, len(k)) + copy(kCopy, k) + keys = append(keys, kCopy) + return maps.IterNone + }) + Expect(err).NotTo(HaveOccurred(), "failed to clean out map before test") + for _, k := range keys { + err = ipsMapV6.Delete(k) + Expect(err).NotTo(HaveOccurred(), "failed to clean out map before test") + } +} diff --git a/felix/daemon/daemon.go b/felix/daemon/daemon.go index 83ec939340c..14263c5f6bd 100644 --- a/felix/daemon/daemon.go +++ b/felix/daemon/daemon.go @@ -398,6 +398,23 @@ configRetry: buildInfoLogCxt.WithField("config", configParams).Info( "Successfully loaded configuration.") + // When running in a Windows hostprocess container (HPC), add Calico Prometheus metrics + // port rules to the Windows firewall. Invoke Windows Powershell to possibly remove an existing rule and add the new rule. Since Felix is restarted when these configs change, changes to PrometheusMetricsPort will always result in an updated firewall rule. + if winutils.InHostProcessContainer() { + winFirewallRuleName := "Calico Prometheus Ports" + log.Infof("Running in a Windows hostprocess container. Adding '%s' firewall rule.", winFirewallRuleName) + + removeFirewallRuleCmd := fmt.Sprintf("Remove-NetFirewallRule -DisplayName '%s' -erroraction 'silentlycontinue'", winFirewallRuleName) + addFirewallRuleCmd := fmt.Sprintf("New-NetFirewallRule -DisplayName '%s' -Direction inbound -Profile Any -Action Allow -LocalPort %d -Protocol TCP", winFirewallRuleName, configParams.PrometheusMetricsPort) + + stdout, stderr, err := winutils.Powershell(removeFirewallRuleCmd + ";" + addFirewallRuleCmd) + if err != nil { + log.Warnf("Error interacting with powershell to add Windows Firewall metrics ports rule\nstdout:%s\nerror: %s\nstderr: %s", stdout, err, stderr) + } else { + log.Debugf("Added '%s' firewall rule.\nstdout: %s\nstderr: %s", winFirewallRuleName, stdout, stderr) + } + } + if configParams.DebugPanicAfter > 0 { log.WithField("delay", configParams.DebugPanicAfter).Warn("DebugPanicAfter is set, will panic after delay!") go panicAfter(configParams.DebugPanicAfter) diff --git a/felix/dataplane/linux/bpf_ep_mgr.go b/felix/dataplane/linux/bpf_ep_mgr.go index 4e743ffc69e..176b77a9b30 100644 --- a/felix/dataplane/linux/bpf_ep_mgr.go +++ b/felix/dataplane/linux/bpf_ep_mgr.go @@ -2807,9 +2807,6 @@ func (m *bpfEndpointManager) loadPolicyProgram(progName string, pg := polprog.NewBuilder(m.ipSetIDAlloc, m.bpfmaps.IpsetsMap.MapFD(), m.bpfmaps.StateMap.MapFD(), progsMap.MapFD(), opts...) - if ipFamily == proto.IPVersion_IPV6 { - pg.EnableIPv6Mode() - } insns, err := pg.Instructions(rules) if err != nil { return nil, nil, fmt.Errorf("failed to generate policy bytecode v%v: %w", ipFamily, err) diff --git a/felix/dataplane/linux/int_dataplane.go b/felix/dataplane/linux/int_dataplane.go index cfff3af392a..90a6c7b5723 100644 --- a/felix/dataplane/linux/int_dataplane.go +++ b/felix/dataplane/linux/int_dataplane.go @@ -765,7 +765,7 @@ func NewIntDataplaneDriver(config Config) *InternalDataplane { } } // Activate the connect-time load balancer. - err = bpfnat.InstallConnectTimeLoadBalancer( + err = bpfnat.InstallConnectTimeLoadBalancer(4, config.BPFCgroupV2, logLevel, config.BPFConntrackTimeouts.UDPLastSeen, excludeUDP) if err != nil { log.WithError(err).Panic("BPFConnTimeLBEnabled but failed to attach connect-time load balancer, bailing out.") diff --git a/go.mod b/go.mod index bf3c8f7cb3d..623e2c6c7f2 100644 --- a/go.mod +++ b/go.mod @@ -16,22 +16,22 @@ require ( github.com/containernetworking/cni v1.0.1 github.com/containernetworking/plugins v1.0.1 github.com/coreos/go-semver v0.3.0 - github.com/davecgh/go-spew v1.1.1 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 - github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 + github.com/envoyproxy/go-control-plane v0.11.1 github.com/fsnotify/fsnotify v1.6.0 github.com/go-ini/ini v1.63.2 github.com/gofrs/flock v0.8.0 github.com/gogo/protobuf v1.3.2 github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 - github.com/golang/protobuf v1.5.2 + github.com/golang/protobuf v1.5.3 github.com/golang/snappy v0.0.4 github.com/google/btree v1.1.2 github.com/google/go-cmp v0.5.9 github.com/google/gopacket v1.1.19 github.com/google/netstack v0.0.0-20191123085552-55fcc16cd0eb github.com/google/safetext v0.0.0-20230106111101-7156a760e523 - github.com/google/uuid v1.3.0 + github.com/google/uuid v1.3.1 github.com/gruntwork-io/terratest v0.41.24 github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07 github.com/joho/godotenv v1.4.0 @@ -59,7 +59,7 @@ require ( github.com/projectcalico/go-json v0.0.0-20161128004156-6219dc7339ba github.com/projectcalico/go-yaml-wrapper v0.0.0-20191112210931-090425220c54 github.com/prometheus/client_golang v1.14.0 - github.com/prometheus/client_model v0.3.0 + github.com/prometheus/client_model v0.4.0 github.com/prometheus/common v0.37.0 github.com/rakelkar/gonetsh v0.3.2 github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1 @@ -68,21 +68,21 @@ require ( github.com/sirupsen/logrus v1.9.0 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.15.0 + github.com/spf13/viper v1.17.0 github.com/tchap/go-patricia/v2 v2.3.1 github.com/termie/go-shutil v0.0.0-20140729215957-bcacb06fecae github.com/vishvananda/netlink v1.2.1-beta.2.0.20230206183746-70ca0345eede - go.etcd.io/etcd/api/v3 v3.5.8 - go.etcd.io/etcd/client/pkg/v3 v3.5.8 - go.etcd.io/etcd/client/v2 v2.305.8 - go.etcd.io/etcd/client/v3 v3.5.8 - golang.org/x/net v0.8.0 - golang.org/x/sync v0.1.0 - golang.org/x/sys v0.6.0 - golang.org/x/text v0.8.0 + go.etcd.io/etcd/api/v3 v3.5.9 + go.etcd.io/etcd/client/pkg/v3 v3.5.9 + go.etcd.io/etcd/client/v2 v2.305.9 + go.etcd.io/etcd/client/v3 v3.5.9 + golang.org/x/net v0.17.0 + golang.org/x/sync v0.4.0 + golang.org/x/sys v0.13.0 + golang.org/x/text v0.13.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20200324154536-ceff61240acf - google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef - google.golang.org/grpc v1.52.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 + google.golang.org/grpc v1.58.2 gopkg.in/go-playground/validator.v9 v9.27.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/yaml.v2 v2.4.0 @@ -103,7 +103,7 @@ require ( ) require ( - cloud.google.com/go/compute v1.14.0 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect github.com/Azure/azure-sdk-for-go v55.0.0+incompatible // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect @@ -136,21 +136,21 @@ require ( github.com/blang/semver/v4 v4.0.0 // indirect github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect github.com/cilium/ebpf v0.7.0 // indirect - github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 // indirect + github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect github.com/containerd/cgroups v1.0.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/containerd/ttrpc v1.1.0 // indirect github.com/coreos/go-iptables v0.6.0 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.9.0 // indirect - github.com/envoyproxy/protoc-gen-validate v0.1.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.2.0 // indirect @@ -175,8 +175,9 @@ require ( github.com/google/cel-go v0.12.6 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect github.com/gruntwork-io/go-commons v0.8.0 // indirect @@ -194,7 +195,7 @@ require ( github.com/lithammer/dedent v1.1.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect @@ -218,21 +219,23 @@ require ( github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect github.com/opencontainers/selinux v1.10.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/pquerna/otp v1.2.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 // indirect - github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.10.0 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect github.com/stretchr/objx v0.5.0 // indirect - github.com/stretchr/testify v1.8.1 // indirect - github.com/subosito/gotenv v1.4.2 // indirect + github.com/stretchr/testify v1.8.4 // indirect + github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/urfave/cli v1.22.2 // indirect github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect @@ -250,18 +253,21 @@ require ( go.opentelemetry.io/otel/trace v1.10.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.8.0 // indirect + go.uber.org/multierr v1.9.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/oauth2 v0.1.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/time v0.1.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.13.0 // indirect golang.zx2c4.com/wireguard v0.0.20200121 // indirect - google.golang.org/api v0.107.0 // indirect + google.golang.org/api v0.143.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/gcfg.v1 v1.2.0 // indirect gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -293,7 +299,6 @@ replace ( // Replace the envoy data-plane-api dependency with the projectcalico fork that includes the generated // go bindings for the API. Upstream only includes the protobuf definitions, so we need to fork in order to - // supply the go code. github.com/envoyproxy/data-plane-api => github.com/projectcalico/data-plane-api v0.0.0-20210121211707-a620ff3c8f7e github.com/projectcalico/api => ./api diff --git a/go.sum b/go.sum index c9e534ee275..b5003251416 100644 --- a/go.sum +++ b/go.sum @@ -27,21 +27,19 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.105.0 h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -86,6 +84,7 @@ github.com/GoogleCloudPlatform/k8s-cloud-provider v1.18.1-0.20220218231025-f1181 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab h1:UKkYhof1njT1/xq4SEg5z+VpTgjmNeHwPGRQl7takDI= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w= @@ -170,9 +169,11 @@ github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -190,8 +191,9 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/container-storage-interface/spec v1.7.0 h1:gW8eyFQUZWWrMWa8p1seJ28gwDoN5CVJ4uAbQ+Hdycw= github.com/container-storage-interface/spec v1.7.0/go.mod h1:JYuzLqr9VVNoDJl44xp/8fmCOvWPDKzuGTwCoklhuqk= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= @@ -231,17 +233,20 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -255,8 +260,10 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20190911111923-ecfe977594f1 h1:yY9rWGoXv1U5pl4gxqlULARMQD7x0QG85lqEXTWysik= +github.com/elazarl/goproxy v0.0.0-20190911111923-ecfe977594f1/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -268,10 +275,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= +github.com/envoyproxy/go-control-plane v0.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY= github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= @@ -279,14 +288,18 @@ github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL github.com/evanphx/json-patch/v5 v5.2.0 h1:8ozOH5xxoMYDt5/u+yMTsVXydVCbTORFnOOoq2lumco= github.com/evanphx/json-patch/v5 v5.2.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -359,8 +372,9 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -393,8 +407,9 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -452,27 +467,32 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/safetext v0.0.0-20230106111101-7156a760e523 h1:i4NsbmB9pD5+Ggp5GZKyvYY6MkjvPE8CIMlkvXFF8gA= github.com/google/safetext v0.0.0-20230106111101-7156a760e523/go.mod h1:mJNEy0r5YPHC7ChQffpOszlGB4L1iqjXWpIEKcFpr9s= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= +github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -528,6 +548,7 @@ github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -581,7 +602,8 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -593,6 +615,7 @@ github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wn github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -608,8 +631,8 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= @@ -642,6 +665,7 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -667,6 +691,7 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= @@ -734,9 +759,10 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= +github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -744,8 +770,9 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok= github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= @@ -768,8 +795,8 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1: github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -791,10 +818,12 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rakelkar/gonetsh v0.3.2 h1:ebvU73nAFQ4zUF28hATOprT1CIhZPrVE9Rs/xN6F6Q4= github.com/rakelkar/gonetsh v0.3.2/go.mod h1:MkEXf5yV9DRTy8TfpWdvMuCTkxajNE/0tn9pvZ6ikDw= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 h1:if3/24+h9Sq6eDx8UUz1SO9cT9tizyIsATfB7b4D3tc= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -803,6 +832,10 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1 h1:ZFfeKAhIQiiOrQaI3/znw0gOmYpO28Tcu1YaqMa/jtQ= github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= +github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= @@ -826,26 +859,27 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= +github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -861,11 +895,12 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes= @@ -874,6 +909,7 @@ github.com/termie/go-shutil v0.0.0-20140729215957-bcacb06fecae h1:vgGSvdW5Lqg+I1 github.com/termie/go-shutil v0.0.0-20140729215957-bcacb06fecae/go.mod h1:quDq6Se6jlGwiIKia/itDZxqC5rj6/8OdFyMMAwTxCs= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= @@ -891,6 +927,7 @@ github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59b github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -900,17 +937,21 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/etcd/api/v3 v3.5.8 h1:Zf44zJszoU7zRV0X/nStPenegNXoFDWcB/MwrJbA+L4= -go.etcd.io/etcd/api/v3 v3.5.8/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.8 h1:tPp9YRn/UBFAHdhOQUII9eUs7aOK35eulpMhX4YBd+M= -go.etcd.io/etcd/client/pkg/v3 v3.5.8/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.8 h1:IGp9Ozt8awy3qRTXSIYJd/o/cr4oUyrm9MF1RJ2dr/c= -go.etcd.io/etcd/client/v2 v2.305.8/go.mod h1:ZlAsxDK5/10I6xVHhFo9zinCMr/DDLKFetDDXlzKwqE= -go.etcd.io/etcd/client/v3 v3.5.8 h1:B6ngTKZSWWowHEoaucOKHQR/AtZKaoHLiUpWxOLG4l4= -go.etcd.io/etcd/client/v3 v3.5.8/go.mod h1:idZYIPVkttBJBiRigkB5EM0MmEyx8jcl18zCV3F5noc= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= +go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= +go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/v2 v2.305.9 h1:YZ2OLi0OvR0H75AcgSUajjd5uqKDKocQUqROTG11jIo= +go.etcd.io/etcd/client/v2 v2.305.9/go.mod h1:0NBdNx9wbxtEQLwAQtrDHwx58m02vXpDcgSYI2seohQ= +go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= +go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= go.etcd.io/etcd/pkg/v3 v3.5.5 h1:Ablg7T7OkR+AeeeU32kdVhw/AGDsitkKPl7aW73ssjU= +go.etcd.io/etcd/pkg/v3 v3.5.5/go.mod h1:6ksYFxttiUGzC2uxyqiyOEvhAiD0tuIqSZkX3TyPdaE= go.etcd.io/etcd/raft/v3 v3.5.5 h1:Ibz6XyZ60OYyRopu73lLM/P+qco3YtlZMOhnXNS051I= +go.etcd.io/etcd/raft/v3 v3.5.5/go.mod h1:76TA48q03g1y1VpTue92jZLr9lIHKUNcYdZOOGyx8rI= go.etcd.io/etcd/server/v3 v3.5.5 h1:jNjYm/9s+f9A9r6+SC4RvNaz6AqixpOvhrFdT0PvIj0= +go.etcd.io/etcd/server/v3 v3.5.5/go.mod h1:rZ95vDw/jrvsbj9XpTqPrTAB9/kzchVdhRirySPkUBc= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -927,6 +968,7 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.3 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0 h1:Ajldaqhxqw/gNzQA45IKFWLdG7jZuXX/wBW1d5qvbUI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0/go.mod h1:9NiG9I2aHTKkcxqCILhjtyNA1QEiCjdBACv4IvrFQ+c= go.opentelemetry.io/contrib/propagators/b3 v1.10.0 h1:6AD2VV8edRdEYNaD8cNckpzgdMLU2kbV9OYyxt2kvCg= +go.opentelemetry.io/contrib/propagators/b3 v1.10.0/go.mod h1:oxvamQ/mTDFQVugml/uFS59+aEUnFLhmd1wsG+n5MOE= go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4= go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 h1:TaB+1rQhddO1sF71MpZOZAuSPW1klK2M8XxfrBMfK7Y= @@ -945,16 +987,18 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= @@ -970,10 +1014,11 @@ golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -984,6 +1029,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1012,8 +1059,9 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180406214816-61147c48b25b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1072,8 +1120,9 @@ golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1092,8 +1141,8 @@ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1107,8 +1156,9 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1201,17 +1251,20 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1223,13 +1276,14 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1294,8 +1348,9 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1334,8 +1389,8 @@ google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.60.0/go.mod h1:d7rl65NZAkEQ90JFzqBjcRq1TVeG5ZoGV3sSpEnnVb4= -google.golang.org/api v0.107.0 h1:I2SlFjD8ZWabaIFOfeEDg3pf0BHJDh6iYQ1ic3Yu/UU= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= +google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1405,8 +1460,12 @@ google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb h1:XFBgcDwm7irdHTbz4Zk2h7Mh+eis4nfJEFQFYzJzuIA= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1:lK0oleSc7IQsUxO3U5TjL9DWlsxpEBemh+zpB7IqhWI= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1435,8 +1494,8 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1452,8 +1511,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1481,6 +1541,7 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXL gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.1 h1:XM28wIgFzaBmeZ5dNHIpWLQpt/9DGKxk+rCg/22nnYE= @@ -1505,6 +1566,7 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1521,11 +1583,13 @@ k8s.io/apimachinery v0.26.5/go.mod h1:HUvk6wrOP4v22AIYqeCGSQ6xWCHo41J9d6psb3temA k8s.io/apiserver v0.26.5 h1:SBzyDpIXXPR4v+mpSU44p9fQerBMkpOH6lmSPCD1wmo= k8s.io/apiserver v0.26.5/go.mod h1:OSbw98Y1bDSbA2izYIKqhi10vb4KWP9b4siiCRFkBVE= k8s.io/cli-runtime v0.26.5 h1:1YTQt6cWaiyA+6NptNMVqkGkh+BFN9cG+PESgz24//U= +k8s.io/cli-runtime v0.26.5/go.mod h1:iZMA8+AVNSownXlJ1h64s59C5/oHSA6hGBarfHjRDl8= k8s.io/client-go v0.26.5 h1:e8Z44pafL/c6ayF/6qYEypbJoDSakaFxhJ9lqULEJEo= k8s.io/client-go v0.26.5/go.mod h1:/CYyNt+ZLMvWqMF8h1SvkUXz2ujFWQLwdDrdiQlZ5X0= k8s.io/cloud-provider v0.26.5 h1:dDiCey75cPQhRy96AmE1Vqo1DJakuHHfnn5DJiwdkTQ= k8s.io/cloud-provider v0.26.5/go.mod h1:tZZTVChlO3isBV/Y6xO4/j0MI+I9/vRkplc8cY8kVvo= k8s.io/cluster-bootstrap v0.26.5 h1:cEfrGtNb2h0C02/jGz7jShUJfANpuTtWHITN0OZZfYg= +k8s.io/cluster-bootstrap v0.26.5/go.mod h1:zIiTj1zaSzQubF7HILoDje/x/HuZE1FxKgxvYv5FVmk= k8s.io/code-generator v0.26.5 h1:0p350mqxkbs29h8/yF4AMilApLVUhnRx3EAfhTWR5fY= k8s.io/code-generator v0.26.5/go.mod h1:iWTVFxfBX+RYe0bXjKqSM83KJF8eimor/izQInvq/60= k8s.io/component-base v0.26.5 h1:nHAzDvXQ4whYpOqrQGWrDIYI/GIeXkuxzqC/iVICfZo= @@ -1549,6 +1613,7 @@ k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kms v0.26.5 h1:Yjgvlxc3KBTAUWuxOIkMUB6YEmqR+rKBkRquBioP8YY= k8s.io/kms v0.26.5/go.mod h1:AYuV9ZebRhr6cb1eT9L6kZVxvgIUxmE1Fe6kPhqYvuc= k8s.io/kube-aggregator v0.26.5 h1:rGDFSMN/wkqWDeRBFBFQXpOw/f5CmjpNEbBA/BTTDi4= +k8s.io/kube-aggregator v0.26.5/go.mod h1:iagfQhzjHATGxSJ2CRy6XW/UTN0unCP9xjeMDck4RWk= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= k8s.io/kube-openapi v0.0.0-20230303024457-afdc3dddf62d h1:VcFq5n7wCJB2FQMCIHfC+f+jNcGgNMar1uKd6rVlifU= k8s.io/kube-openapi v0.0.0-20230303024457-afdc3dddf62d/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= @@ -1565,11 +1630,13 @@ k8s.io/kubernetes v1.26.5/go.mod h1:nARWq2FQXUzRa+DQfF6hEp0dgZXu61MnjX+aiQaC8lk= k8s.io/legacy-cloud-providers v0.26.5 h1:24bwj3gDSZCn6SCu19GJ1iueNjHB+3bP9xOi9yXU9SY= k8s.io/legacy-cloud-providers v0.26.5/go.mod h1:RmReppNYcUZYJdpTfnMO9pHMlLwHxHyAtiFR7IY+3mc= k8s.io/metrics v0.26.5 h1:J2vPw1u49iA1rAByeAObffn60WvcxZwTCmMTB3+LWAM= +k8s.io/metrics v0.26.5/go.mod h1:g3YZfYetr4JJ+uA2q2Vdkr/D9bswPgQDOvost7ZTLHQ= k8s.io/mount-utils v0.26.5 h1:OYqtkQgtu3hCOYEv09rLdJu/YowXvrM0H6JiPGX6PWI= k8s.io/mount-utils v0.26.5/go.mod h1:S+09/ujdtdKRo3bzSQXonHpIEKc+svPe8SNgBUJBj8E= k8s.io/pod-security-admission v0.26.5 h1:Q9kQx1oS8RvHVwQmind+SmsQ3244Ha7Wmm9v7DlZQu0= k8s.io/pod-security-admission v0.26.5/go.mod h1:IXv1XIvTDOv6U6hyJ+jCCzrDl6jEo1Rhwm7kQtoaY/8= k8s.io/sample-apiserver v0.26.5 h1:RVqCAkUfiqHOvIlP/ZO+02Nm9MPjkskA4CZMcw/ziKU= +k8s.io/sample-apiserver v0.26.5/go.mod h1:5+cm8XKzNimTrqoYfqAay9Z0nq6vOgkQgdL7Hb+xKkA= k8s.io/utils v0.0.0-20200410111917-5770800c2500/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1577,6 +1644,7 @@ k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1590,7 +1658,9 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h6 sigs.k8s.io/kind v0.11.1 h1:pVzOkhUwMBrCB0Q/WllQDO3v14Y+o2V0tFgjTqIUjwA= sigs.k8s.io/kind v0.11.1/go.mod h1:fRpgVhtqAWrtLB9ED7zQahUimpUXuG/iHT88xYqEGIA= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/node/Makefile b/node/Makefile index 72c1cd3886e..54433902ac2 100644 --- a/node/Makefile +++ b/node/Makefile @@ -143,6 +143,7 @@ LDFLAGS= -X $(PACKAGE_NAME)/pkg/lifecycle/startup.VERSION=$(GIT_VERSION) \ # Source golang files on which compiling the calico-node binary depends. SRC_FILES=$(shell find ./pkg -name '*.go') \ + $(shell find ./cmd -name '*.go') \ $(shell find ../felix -name '*.go') \ $(shell find ../felix -name '*.[ch]') \ $(shell find ../libcalico-go -name '*.go') \ @@ -228,7 +229,7 @@ else endif -$(WINDOWS_BINARY): +$(WINDOWS_BINARY): $(SRC_FILES) $(DOCKER_GO_BUILD_CGO_WINDOWS) sh -c '$(GIT_CONFIG_SSH) \ GOOS=windows CC=x86_64-w64-mingw32-gcc \ go build -buildvcs=false --buildmode=exe -v -o $@ -ldflags "$(LDFLAGS)" ./cmd/calico-node/main.go'