diff --git a/go.mod b/go.mod index 9137c5679c5..a4205a742f1 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/cilium/tetragon go 1.18 require ( - github.com/cilium/cilium v1.13.1 + github.com/cilium/cilium v1.13.4 github.com/cilium/ebpf v0.11.0 github.com/cilium/little-vm-helper v0.0.7 github.com/cilium/lumberjack/v2 v2.3.0 diff --git a/go.sum b/go.sum index 86b3effa2a8..ab25bd6b986 100644 --- a/go.sum +++ b/go.sum @@ -99,8 +99,8 @@ github.com/chancez/lumberjack v0.0.0-20220314160755-2b78c6a5f7bc/go.mod h1:MTkMt github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/cilium v1.13.1 h1:6JzlYiZw1HqToqZJd5Hb6Xk1QasptOEUS1UUO4LneBQ= -github.com/cilium/cilium v1.13.1/go.mod h1:xHiUYiRvIsJTqkkTq7xNWXBDZZ5UqyrYJktYZJYuYjI= +github.com/cilium/cilium v1.13.4 h1:rvbcA6q7YMWtDfEtx9y4olL46wBFoZfM2BazUoJlaRI= +github.com/cilium/cilium v1.13.4/go.mod h1:bppTjxboubrsI835+yp3vZ2S79wRQbZCbUiHxrAIOQY= github.com/cilium/controller-tools v0.6.2 h1:oIkqAzqncKsm+lQFJVP6n+bqHOVs9nUZ06hgZ4PxlMM= github.com/cilium/controller-tools v0.6.2/go.mod h1:oaeGpjXn6+ZSEIQkUe/+3I40PNiDYp9aeawbt3xTgJ8= github.com/cilium/dns v1.1.50 h1:GI0YxPPOANR68M7py43EckDho0Idf5i0M7Tce7bYDNk= @@ -111,7 +111,7 @@ github.com/cilium/little-vm-helper v0.0.7 h1:v/ZhUSUbVOs6usDMBYNAPt1IHnoTKZGsPdi github.com/cilium/little-vm-helper v0.0.7/go.mod h1:cxTPqcalrh3TIPkdteb7SYq3hiXT7qYaRMASV7tdL0k= github.com/cilium/lumberjack/v2 v2.3.0 h1:IhVJMvPpqDYmQzC0KDhAoy7KlaRsyOsZnT97Nsa3u0o= github.com/cilium/lumberjack/v2 v2.3.0/go.mod h1:yfbtPGmg4i//5oEqzaMxDqSWqgfZFmMoV70Mc2k6v0A= -github.com/cilium/proxy v0.0.0-20230219184343-04413917ff99 h1:5NGvGz6Rdh1SmDuLl3CSBBv8IC+935Zn5bMS1X7koMk= +github.com/cilium/proxy v0.0.0-20230605062201-ca87bee70e40 h1:+c52Z2Fy2QcL/4Ri4OMCSeMLrTDdhPsXqzi6IIZ26kk= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= diff --git a/pkg/k8s/go.mod b/pkg/k8s/go.mod index 226c21fefb3..48b74ef6985 100644 --- a/pkg/k8s/go.mod +++ b/pkg/k8s/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/blang/semver/v4 v4.0.0 - github.com/cilium/cilium v1.13.1 + github.com/cilium/cilium v1.13.4 github.com/sirupsen/logrus v1.9.3 golang.org/x/sync v0.3.0 k8s.io/apiextensions-apiserver v0.26.6 diff --git a/pkg/k8s/go.sum b/pkg/k8s/go.sum index 723d78632f0..5209f53968c 100644 --- a/pkg/k8s/go.sum +++ b/pkg/k8s/go.sum @@ -35,8 +35,8 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/chancez/lumberjack v0.0.0-20220314160755-2b78c6a5f7bc/go.mod h1:MTkMtVFAjFChVkoycc9XjGGH6jiuI6qO71iEdcyNq7I= github.com/christarazi/controller-tools v0.3.1-0.20200911184030-7e668c1fb4c2 h1:e8rUgm4lkgItm5/qX43VmvtRkxaOhLIPP6gWjP9Eib4= github.com/christarazi/controller-tools v0.3.1-0.20200911184030-7e668c1fb4c2/go.mod h1:hJyC9ybFldjAq/sR0x8jwbV9g0uPxjl8fqBa+mVa3DE= -github.com/cilium/cilium v1.13.1 h1:6JzlYiZw1HqToqZJd5Hb6Xk1QasptOEUS1UUO4LneBQ= -github.com/cilium/cilium v1.13.1/go.mod h1:xHiUYiRvIsJTqkkTq7xNWXBDZZ5UqyrYJktYZJYuYjI= +github.com/cilium/cilium v1.13.4 h1:rvbcA6q7YMWtDfEtx9y4olL46wBFoZfM2BazUoJlaRI= +github.com/cilium/cilium v1.13.4/go.mod h1:bppTjxboubrsI835+yp3vZ2S79wRQbZCbUiHxrAIOQY= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= diff --git a/pkg/k8s/vendor/github.com/cilium/cilium/AUTHORS b/pkg/k8s/vendor/github.com/cilium/cilium/AUTHORS index d6a0c80bb29..ca54e4fe886 100644 --- a/pkg/k8s/vendor/github.com/cilium/cilium/AUTHORS +++ b/pkg/k8s/vendor/github.com/cilium/cilium/AUTHORS @@ -11,6 +11,7 @@ adamzhoul adamzhoul186@gmail.com Aditi Ghag aditi@cilium.io Aditya Purandare aditya.p1993@hotmail.com Adrien Trouillaud adrienjt@users.noreply.github.com +Akhil Velagapudi 4@4khil.com Akshat Agarwal humancalico@disroot.org Alan Kutniewski kutniewski@google.com Alban Crequy alban@kinvolk.io @@ -34,6 +35,7 @@ Andree Klattenhoff mail@andr.ee André Martins andre@cilium.io Andrew Bulford andrew.bulford@form3.tech Andrew Holt andrew.holt@utmost.co +Andrew Sauber 2046750+asauber@users.noreply.github.com Andrew Sy Kim kim.andrewsy@gmail.com Andrey Devyatkin andrey.devyatkin@fivexl.io Andrey Klimentyev andrey.klimentyev@flant.com @@ -47,6 +49,7 @@ Anna Kapuscinska anna@isovalent.com Anthony Rabbito hello@anthonyrabbito.com Antoine Coetsier acr@exoscale.ch Antoine Legrand 2t.antoine@gmail.com +Antonio Ojea aojea@google.com Anton Protopopov aspsk@isovalent.com Anurag Aggarwal anurag.aggarwal@flipkart.com Archana Shinde archana.m.shinde@intel.com @@ -54,16 +57,19 @@ Arika Chen eaglesora@gmail.com Arnaud Meukam ameukam@gmail.com Arthur Chiao arthurchiao@hotmail.com Arthur Evstifeev mail@ap4y.me +Arthur Outhenin-Chalandre arthur@cri.epita.fr Arvind Soni arvind@covalent.io Ashray Jain ashrayj@palantir.com Ashwin Paranjpe ashwin@covalent.io Assiya Khuzyakhmetova assiya.khuzyakhmetova@nu.edu.kz Atkins Chang atkinschang@gmail.com Austin Cawley-Edwards austin.cawley@gmail.com +ayesha khaliq ayeshakhaliqrana@gmail.com Ayush Dwivedi ayush.dwivedi@accuknox.com Barun Acharya barun1024@gmail.com Basit Mustafa basit.mustafa@gmail.com Beatriz Martínez beatriz@isovalent.com +Benjamin Leggett benjamin.leggett@solo.io Benjamin Pineau benjamin.pineau@datadoghq.com Bill Mulligan billmulligan516@gmail.com Bingshen Wang bingshen.wbs@alibaba-inc.com @@ -93,6 +99,7 @@ Charles-Henri Guérin charles-henri.guerin@zenika.com Chen Kang kongchen28@gmail.com chenyahui chenyahui9@jd.com Chen Yaqi chenyaqi01@baidu.com +chenyuezhou zcy.chenyue.zhou@gmail.com Chris Tarazi chris@isovalent.com Christian Hörtnagl christian2@univie.ac.at Christian Hüning christian.huening@finleap.com @@ -120,6 +127,7 @@ Daniel T. Lee danieltimlee@gmail.com Danni Skov Høglund skuffe@pwnz.dk Dan Sexton dan.b.sexton@gmail.com Dan Wendlandt dan@covalent.io +darox maderdario@gmail.com Darren Foo darren.foo@shopify.com Darren Mackintosh unixdaddy@gmail.com Darshan Chaudhary deathbullet@gmail.com @@ -172,6 +180,7 @@ Faiyaz Ahmed faiyaza@gmail.com Fankaixi Li fankaixi.li@bytedance.com Federico Hernandez f@ederi.co Felix Färjsjö felix.farjsjo@gmail.com +Feroz Salam feroz.salam@isovalent.com FeynmanZhou pengfeizhou@yunify.com Florian Koch f0@users.noreply.github.com Florian Lehner dev@der-flo.net @@ -195,6 +204,7 @@ gjmzj jmgaozz@hotmail.com Glib Smaga code@gsmaga.com Gobinath Krishnamoorthy gobinathk@google.com Gowtham Sundara gowtham.sundara@rapyuta-robotics.com +gray gray.liang@isovalent.com Guilherme Oki guilherme.oki@wildlifestudios.com Guilherme Souza 101073+guilhermef@users.noreply.github.com Gunju Kim gjkim042@gmail.com @@ -204,6 +214,7 @@ Han Zhou hzhou8@ebay.com Hao Tian t117503445@gmail.com Hao Zhang hao.zhang.am.i@gmail.com Harsh Modi harshmodi@google.com +harsimran pabla hpabla@isovalent.com Hart Hoover hart.hoover@gmail.com Heiko Rothe me@heikorothe.com Hemanth Malla hemanth.malla@datadoghq.com @@ -225,6 +236,7 @@ Jan-Erik Rediger janerik@fnordig.de Jarno Rajahalme jarno@isovalent.com Jean Raby jean@raby.sh Jed Salazar jedsalazar@gmail.com +Jef Spaleta jspaleta@gmail.com Jerry J. Muzsik jerrymuzsik@icloud.com Jess Frazelle acidburn@microsoft.com Jiang Wang jiang.wang@bytedance.com @@ -251,6 +263,7 @@ Jonathan Davies jpds@protonmail.com Jones Shi shilei@hotstone.com.cn Jorik Jonker jorik.jonker@eu.equinix.com Joseph-Irving joseph.irving500@gmail.com +Joseph Sheng jiajun.sheng@microfocus.com Joseph Stevens thejosephstevens@gmail.com Joshua Roppo joshroppo@gmail.com Juan Jimenez-Anca cortopy@users.noreply.github.com @@ -284,6 +297,7 @@ leonliao xiaobo.liao@gmail.com Liang Zhou zhoul110@chinatelecom.cn Li Chengyuan chengyli@ebay.com LiHui andrewli@yunify.com +Lin Dong lindongld@google.com Lin Sun lin.sun@solo.io Lior Rozen liorr@tailorbrands.com Liu Qun qunliu@zyhx-group.com @@ -293,6 +307,7 @@ Li Yiheng lyhutopi@gmail.com Liz Rice liz@lizrice.com longhui.li longhui.li@woqutech.com LongHui Li longhui.li@woqutech.com +Lorenz Bauer lmb@isovalent.com Lorenzo Fundaró lorenzofundaro@gmail.com Louis DeLosSantos louis@isovalent.com lou-lan loulan@loulan.me @@ -311,6 +326,8 @@ Manuel Buil mbuil@suse.com Manuel Stößel manuel.stoessel@t-systems.com Marcel Zieba marcel.zieba@isovalent.com Marcin Skarbek git@skarbek.name +Marcin Swiderski forgems@gmail.com +Marco Hofstetter marco.hofstetter@isovalent.com Marco Iorio marco.iorio@isovalent.com Marco Kilchhofer mkilchhofer@users.noreply.github.com Marc Stulz m@footek.ch @@ -323,6 +340,7 @@ Martin Charles martincharles07@gmail.com Martin Koppehel martin.koppehel@st.ovgu.de Martin Odstrcilik martin.odstrcilik@gmail.com Martynas Pumputis m@lambda.lt +Marvin Gaube dev@marvingaube.de Marwin Baumann 56264798+marwinbaumannsbp@users.noreply.github.com Matej Gera matejgera@gmail.com Mathias Herzog mathu@gmx.ch @@ -332,6 +350,7 @@ Matthew Fenwick mfenwick100@gmail.com Matthew Gumport me@gum.pt Matthieu Antoine matthieu.antoine@jumo.world Matt Layher mdlayher@gmail.com +Matyáš Kroupa kroupa.matyas@gmail.com Mauricio Vásquez mauricio@kinvolk.io Maxime Brunet max@brnt.mx Maxime Visonneau maxime.visonneau@gmail.com @@ -396,7 +415,7 @@ Patrice Chalin chalin@cncf.io Patrice Peterson patrice.peterson@mailbox.org Patrick Mahoney pmahoney@greenkeytech.com Patrik Cyvoct patrik@ptrk.io -Paul Chaignon paul@cilium.io +Paul Chaignon paul.chaignon@gmail.com Paulo Gomes pjbgf@linux.com Pavel Pavlov 40396270+PavelPavlov46@users.noreply.github.com Paweł Prażak pawelprazak@users.noreply.github.com @@ -467,12 +486,12 @@ Shunpoco tkngsnsk313320@gmail.com Sigurd Spieckermann sigurd.spieckermann@gmail.com Simone Sciarrati s.sciarrati@gmail.com Simon Pasquier spasquier@mirantis.com -sjdot sjdot@protonmail.com Smaine Kahlouch smainklh@gmail.com Stacy Kim stacy.kim@ucla.edu Stephen Martin lockwood@opperline.com Steven Ceuppens steven.ceuppens@icloud.com Steven Dake steven.dake@gmail.com +Steven Johnson sjdot@protonmail.com Steven Normore snormore@digitalocean.com Steven Shuang stevenshuang521@gmail.com Stevo Slavić sslavic@gmail.com @@ -488,6 +507,7 @@ tanberBro pengfei.song@daocloud.io Tasdik Rahman prodicus@outlook.com Te-Yu Chang dale.teyuchang@gmail.com Thales Paiva thales@accuknox.com +TheAifam5 theaifam5@gmail.com Thearas thearas850@gmail.com Thiago Navarro navarro@accuknox.com Thi Van Le vannnyle@gmail.com @@ -508,6 +528,7 @@ Tomoki Sugiura cheztomo513@gmail.com Tom Payne tom@isovalent.com Tony Lambiris tony@criticalstack.com Tony Lu tonylu@linux.alibaba.com +Tore S. Loenoey tore.lonoy@gmail.com Travis Glenn Hansen travisghansen@yahoo.com Trevor Roberts Jr Trevor.Roberts.Jr@gmail.com Trevor Tao trevor.tao@arm.com diff --git a/pkg/k8s/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go b/pkg/k8s/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go index 6061acecb15..08b34572097 100644 --- a/pkg/k8s/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go +++ b/pkg/k8s/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go @@ -225,6 +225,9 @@ const ( // Hash is a hash of something Hash = "hash" + // ServerNames is the list of TLS SNIs + ServerNames = "serverNames" + // ServiceName is the orchestration framework name for a service ServiceName = "serviceName" @@ -614,6 +617,10 @@ const ( // SourceIP is a source IP SourceIP = "sourceIP" + DestinationIP = "destinationIP" + + SourceCIDR = "sourceCIDR" + // DestinationCIDR is a destination CIDR DestinationCIDR = "destinationCIDR" @@ -629,6 +636,13 @@ const ( // Number of Backends failed while restoration. FailedBackends = "failedBackends" + // SkippedBackends is the number of Backends that were skipped during restore + // as duplicates. + SkippedBackends = "skippedBackends" + + // OrphanBackends is the number Backends that are not associated with any services. + OrphanBackends = "orphanBackends" + // Number of Services failed while restoration. RestoredSVCs = "restoredServices" diff --git a/pkg/k8s/vendor/modules.txt b/pkg/k8s/vendor/modules.txt index 26a6b712627..9a44f8cfd6e 100644 --- a/pkg/k8s/vendor/modules.txt +++ b/pkg/k8s/vendor/modules.txt @@ -1,7 +1,7 @@ # github.com/blang/semver/v4 v4.0.0 ## explicit; go 1.14 github.com/blang/semver/v4 -# github.com/cilium/cilium v1.13.1 +# github.com/cilium/cilium v1.13.4 ## explicit; go 1.19 github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/labels github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/meta/v1 diff --git a/vendor/github.com/cilium/cilium/AUTHORS b/vendor/github.com/cilium/cilium/AUTHORS index d6a0c80bb29..ca54e4fe886 100644 --- a/vendor/github.com/cilium/cilium/AUTHORS +++ b/vendor/github.com/cilium/cilium/AUTHORS @@ -11,6 +11,7 @@ adamzhoul adamzhoul186@gmail.com Aditi Ghag aditi@cilium.io Aditya Purandare aditya.p1993@hotmail.com Adrien Trouillaud adrienjt@users.noreply.github.com +Akhil Velagapudi 4@4khil.com Akshat Agarwal humancalico@disroot.org Alan Kutniewski kutniewski@google.com Alban Crequy alban@kinvolk.io @@ -34,6 +35,7 @@ Andree Klattenhoff mail@andr.ee André Martins andre@cilium.io Andrew Bulford andrew.bulford@form3.tech Andrew Holt andrew.holt@utmost.co +Andrew Sauber 2046750+asauber@users.noreply.github.com Andrew Sy Kim kim.andrewsy@gmail.com Andrey Devyatkin andrey.devyatkin@fivexl.io Andrey Klimentyev andrey.klimentyev@flant.com @@ -47,6 +49,7 @@ Anna Kapuscinska anna@isovalent.com Anthony Rabbito hello@anthonyrabbito.com Antoine Coetsier acr@exoscale.ch Antoine Legrand 2t.antoine@gmail.com +Antonio Ojea aojea@google.com Anton Protopopov aspsk@isovalent.com Anurag Aggarwal anurag.aggarwal@flipkart.com Archana Shinde archana.m.shinde@intel.com @@ -54,16 +57,19 @@ Arika Chen eaglesora@gmail.com Arnaud Meukam ameukam@gmail.com Arthur Chiao arthurchiao@hotmail.com Arthur Evstifeev mail@ap4y.me +Arthur Outhenin-Chalandre arthur@cri.epita.fr Arvind Soni arvind@covalent.io Ashray Jain ashrayj@palantir.com Ashwin Paranjpe ashwin@covalent.io Assiya Khuzyakhmetova assiya.khuzyakhmetova@nu.edu.kz Atkins Chang atkinschang@gmail.com Austin Cawley-Edwards austin.cawley@gmail.com +ayesha khaliq ayeshakhaliqrana@gmail.com Ayush Dwivedi ayush.dwivedi@accuknox.com Barun Acharya barun1024@gmail.com Basit Mustafa basit.mustafa@gmail.com Beatriz Martínez beatriz@isovalent.com +Benjamin Leggett benjamin.leggett@solo.io Benjamin Pineau benjamin.pineau@datadoghq.com Bill Mulligan billmulligan516@gmail.com Bingshen Wang bingshen.wbs@alibaba-inc.com @@ -93,6 +99,7 @@ Charles-Henri Guérin charles-henri.guerin@zenika.com Chen Kang kongchen28@gmail.com chenyahui chenyahui9@jd.com Chen Yaqi chenyaqi01@baidu.com +chenyuezhou zcy.chenyue.zhou@gmail.com Chris Tarazi chris@isovalent.com Christian Hörtnagl christian2@univie.ac.at Christian Hüning christian.huening@finleap.com @@ -120,6 +127,7 @@ Daniel T. Lee danieltimlee@gmail.com Danni Skov Høglund skuffe@pwnz.dk Dan Sexton dan.b.sexton@gmail.com Dan Wendlandt dan@covalent.io +darox maderdario@gmail.com Darren Foo darren.foo@shopify.com Darren Mackintosh unixdaddy@gmail.com Darshan Chaudhary deathbullet@gmail.com @@ -172,6 +180,7 @@ Faiyaz Ahmed faiyaza@gmail.com Fankaixi Li fankaixi.li@bytedance.com Federico Hernandez f@ederi.co Felix Färjsjö felix.farjsjo@gmail.com +Feroz Salam feroz.salam@isovalent.com FeynmanZhou pengfeizhou@yunify.com Florian Koch f0@users.noreply.github.com Florian Lehner dev@der-flo.net @@ -195,6 +204,7 @@ gjmzj jmgaozz@hotmail.com Glib Smaga code@gsmaga.com Gobinath Krishnamoorthy gobinathk@google.com Gowtham Sundara gowtham.sundara@rapyuta-robotics.com +gray gray.liang@isovalent.com Guilherme Oki guilherme.oki@wildlifestudios.com Guilherme Souza 101073+guilhermef@users.noreply.github.com Gunju Kim gjkim042@gmail.com @@ -204,6 +214,7 @@ Han Zhou hzhou8@ebay.com Hao Tian t117503445@gmail.com Hao Zhang hao.zhang.am.i@gmail.com Harsh Modi harshmodi@google.com +harsimran pabla hpabla@isovalent.com Hart Hoover hart.hoover@gmail.com Heiko Rothe me@heikorothe.com Hemanth Malla hemanth.malla@datadoghq.com @@ -225,6 +236,7 @@ Jan-Erik Rediger janerik@fnordig.de Jarno Rajahalme jarno@isovalent.com Jean Raby jean@raby.sh Jed Salazar jedsalazar@gmail.com +Jef Spaleta jspaleta@gmail.com Jerry J. Muzsik jerrymuzsik@icloud.com Jess Frazelle acidburn@microsoft.com Jiang Wang jiang.wang@bytedance.com @@ -251,6 +263,7 @@ Jonathan Davies jpds@protonmail.com Jones Shi shilei@hotstone.com.cn Jorik Jonker jorik.jonker@eu.equinix.com Joseph-Irving joseph.irving500@gmail.com +Joseph Sheng jiajun.sheng@microfocus.com Joseph Stevens thejosephstevens@gmail.com Joshua Roppo joshroppo@gmail.com Juan Jimenez-Anca cortopy@users.noreply.github.com @@ -284,6 +297,7 @@ leonliao xiaobo.liao@gmail.com Liang Zhou zhoul110@chinatelecom.cn Li Chengyuan chengyli@ebay.com LiHui andrewli@yunify.com +Lin Dong lindongld@google.com Lin Sun lin.sun@solo.io Lior Rozen liorr@tailorbrands.com Liu Qun qunliu@zyhx-group.com @@ -293,6 +307,7 @@ Li Yiheng lyhutopi@gmail.com Liz Rice liz@lizrice.com longhui.li longhui.li@woqutech.com LongHui Li longhui.li@woqutech.com +Lorenz Bauer lmb@isovalent.com Lorenzo Fundaró lorenzofundaro@gmail.com Louis DeLosSantos louis@isovalent.com lou-lan loulan@loulan.me @@ -311,6 +326,8 @@ Manuel Buil mbuil@suse.com Manuel Stößel manuel.stoessel@t-systems.com Marcel Zieba marcel.zieba@isovalent.com Marcin Skarbek git@skarbek.name +Marcin Swiderski forgems@gmail.com +Marco Hofstetter marco.hofstetter@isovalent.com Marco Iorio marco.iorio@isovalent.com Marco Kilchhofer mkilchhofer@users.noreply.github.com Marc Stulz m@footek.ch @@ -323,6 +340,7 @@ Martin Charles martincharles07@gmail.com Martin Koppehel martin.koppehel@st.ovgu.de Martin Odstrcilik martin.odstrcilik@gmail.com Martynas Pumputis m@lambda.lt +Marvin Gaube dev@marvingaube.de Marwin Baumann 56264798+marwinbaumannsbp@users.noreply.github.com Matej Gera matejgera@gmail.com Mathias Herzog mathu@gmx.ch @@ -332,6 +350,7 @@ Matthew Fenwick mfenwick100@gmail.com Matthew Gumport me@gum.pt Matthieu Antoine matthieu.antoine@jumo.world Matt Layher mdlayher@gmail.com +Matyáš Kroupa kroupa.matyas@gmail.com Mauricio Vásquez mauricio@kinvolk.io Maxime Brunet max@brnt.mx Maxime Visonneau maxime.visonneau@gmail.com @@ -396,7 +415,7 @@ Patrice Chalin chalin@cncf.io Patrice Peterson patrice.peterson@mailbox.org Patrick Mahoney pmahoney@greenkeytech.com Patrik Cyvoct patrik@ptrk.io -Paul Chaignon paul@cilium.io +Paul Chaignon paul.chaignon@gmail.com Paulo Gomes pjbgf@linux.com Pavel Pavlov 40396270+PavelPavlov46@users.noreply.github.com Paweł Prażak pawelprazak@users.noreply.github.com @@ -467,12 +486,12 @@ Shunpoco tkngsnsk313320@gmail.com Sigurd Spieckermann sigurd.spieckermann@gmail.com Simone Sciarrati s.sciarrati@gmail.com Simon Pasquier spasquier@mirantis.com -sjdot sjdot@protonmail.com Smaine Kahlouch smainklh@gmail.com Stacy Kim stacy.kim@ucla.edu Stephen Martin lockwood@opperline.com Steven Ceuppens steven.ceuppens@icloud.com Steven Dake steven.dake@gmail.com +Steven Johnson sjdot@protonmail.com Steven Normore snormore@digitalocean.com Steven Shuang stevenshuang521@gmail.com Stevo Slavić sslavic@gmail.com @@ -488,6 +507,7 @@ tanberBro pengfei.song@daocloud.io Tasdik Rahman prodicus@outlook.com Te-Yu Chang dale.teyuchang@gmail.com Thales Paiva thales@accuknox.com +TheAifam5 theaifam5@gmail.com Thearas thearas850@gmail.com Thiago Navarro navarro@accuknox.com Thi Van Le vannnyle@gmail.com @@ -508,6 +528,7 @@ Tomoki Sugiura cheztomo513@gmail.com Tom Payne tom@isovalent.com Tony Lambiris tony@criticalstack.com Tony Lu tonylu@linux.alibaba.com +Tore S. Loenoey tore.lonoy@gmail.com Travis Glenn Hansen travisghansen@yahoo.com Trevor Roberts Jr Trevor.Roberts.Jr@gmail.com Trevor Tao trevor.tao@arm.com diff --git a/vendor/github.com/cilium/cilium/api/v1/client/bgp/bgp_client.go b/vendor/github.com/cilium/cilium/api/v1/client/bgp/bgp_client.go new file mode 100644 index 00000000000..194e031d027 --- /dev/null +++ b/vendor/github.com/cilium/cilium/api/v1/client/bgp/bgp_client.go @@ -0,0 +1,87 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Copyright Authors of Cilium +// SPDX-License-Identifier: Apache-2.0 + +package bgp + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" +) + +// New creates a new bgp API client. +func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { + return &Client{transport: transport, formats: formats} +} + +/* +Client for bgp API +*/ +type Client struct { + transport runtime.ClientTransport + formats strfmt.Registry +} + +// ClientOption is the option for Client methods +type ClientOption func(*runtime.ClientOperation) + +// ClientService is the interface for Client methods +type ClientService interface { + GetBgpPeers(params *GetBgpPeersParams, opts ...ClientOption) (*GetBgpPeersOK, error) + + SetTransport(transport runtime.ClientTransport) +} + +/* + GetBgpPeers lists operational state of b g p peers + + Retrieves current operational state of BGP peers created by + +Cilium BGP virtual router. This includes session state, uptime, +information per address family, etc. +*/ +func (a *Client) GetBgpPeers(params *GetBgpPeersParams, opts ...ClientOption) (*GetBgpPeersOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewGetBgpPeersParams() + } + op := &runtime.ClientOperation{ + ID: "GetBgpPeers", + Method: "GET", + PathPattern: "/bgp/peers", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &GetBgpPeersReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*GetBgpPeersOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for GetBgpPeers: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + +// SetTransport changes the transport on the client +func (a *Client) SetTransport(transport runtime.ClientTransport) { + a.transport = transport +} diff --git a/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_parameters.go b/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_parameters.go new file mode 100644 index 00000000000..9b4fb3d7cb6 --- /dev/null +++ b/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_parameters.go @@ -0,0 +1,131 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Copyright Authors of Cilium +// SPDX-License-Identifier: Apache-2.0 + +package bgp + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewGetBgpPeersParams creates a new GetBgpPeersParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewGetBgpPeersParams() *GetBgpPeersParams { + return &GetBgpPeersParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewGetBgpPeersParamsWithTimeout creates a new GetBgpPeersParams object +// with the ability to set a timeout on a request. +func NewGetBgpPeersParamsWithTimeout(timeout time.Duration) *GetBgpPeersParams { + return &GetBgpPeersParams{ + timeout: timeout, + } +} + +// NewGetBgpPeersParamsWithContext creates a new GetBgpPeersParams object +// with the ability to set a context for a request. +func NewGetBgpPeersParamsWithContext(ctx context.Context) *GetBgpPeersParams { + return &GetBgpPeersParams{ + Context: ctx, + } +} + +// NewGetBgpPeersParamsWithHTTPClient creates a new GetBgpPeersParams object +// with the ability to set a custom HTTPClient for a request. +func NewGetBgpPeersParamsWithHTTPClient(client *http.Client) *GetBgpPeersParams { + return &GetBgpPeersParams{ + HTTPClient: client, + } +} + +/* +GetBgpPeersParams contains all the parameters to send to the API endpoint + + for the get bgp peers operation. + + Typically these are written to a http.Request. +*/ +type GetBgpPeersParams struct { + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the get bgp peers params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetBgpPeersParams) WithDefaults() *GetBgpPeersParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the get bgp peers params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetBgpPeersParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the get bgp peers params +func (o *GetBgpPeersParams) WithTimeout(timeout time.Duration) *GetBgpPeersParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the get bgp peers params +func (o *GetBgpPeersParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the get bgp peers params +func (o *GetBgpPeersParams) WithContext(ctx context.Context) *GetBgpPeersParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the get bgp peers params +func (o *GetBgpPeersParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the get bgp peers params +func (o *GetBgpPeersParams) WithHTTPClient(client *http.Client) *GetBgpPeersParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the get bgp peers params +func (o *GetBgpPeersParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WriteToRequest writes these params to a swagger request +func (o *GetBgpPeersParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_responses.go b/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_responses.go new file mode 100644 index 00000000000..f06304ce694 --- /dev/null +++ b/vendor/github.com/cilium/cilium/api/v1/client/bgp/get_bgp_peers_responses.go @@ -0,0 +1,99 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Copyright Authors of Cilium +// SPDX-License-Identifier: Apache-2.0 + +package bgp + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + "github.com/cilium/cilium/api/v1/models" +) + +// GetBgpPeersReader is a Reader for the GetBgpPeers structure. +type GetBgpPeersReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *GetBgpPeersReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewGetBgpPeersOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code()) + } +} + +// NewGetBgpPeersOK creates a GetBgpPeersOK with default headers values +func NewGetBgpPeersOK() *GetBgpPeersOK { + return &GetBgpPeersOK{} +} + +/* +GetBgpPeersOK describes a response with status code 200, with default header values. + +Success +*/ +type GetBgpPeersOK struct { + Payload []*models.BgpPeer +} + +// IsSuccess returns true when this get bgp peers o k response has a 2xx status code +func (o *GetBgpPeersOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this get bgp peers o k response has a 3xx status code +func (o *GetBgpPeersOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get bgp peers o k response has a 4xx status code +func (o *GetBgpPeersOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this get bgp peers o k response has a 5xx status code +func (o *GetBgpPeersOK) IsServerError() bool { + return false +} + +// IsCode returns true when this get bgp peers o k response a status code equal to that given +func (o *GetBgpPeersOK) IsCode(code int) bool { + return code == 200 +} + +func (o *GetBgpPeersOK) Error() string { + return fmt.Sprintf("[GET /bgp/peers][%d] getBgpPeersOK %+v", 200, o.Payload) +} + +func (o *GetBgpPeersOK) String() string { + return fmt.Sprintf("[GET /bgp/peers][%d] getBgpPeersOK %+v", 200, o.Payload) +} + +func (o *GetBgpPeersOK) GetPayload() []*models.BgpPeer { + return o.Payload +} + +func (o *GetBgpPeersOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/vendor/github.com/cilium/cilium/api/v1/client/cilium_api_client.go b/vendor/github.com/cilium/cilium/api/v1/client/cilium_api_client.go index 04bc1154ad0..0e421911e53 100644 --- a/vendor/github.com/cilium/cilium/api/v1/client/cilium_api_client.go +++ b/vendor/github.com/cilium/cilium/api/v1/client/cilium_api_client.go @@ -13,6 +13,7 @@ import ( httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" + "github.com/cilium/cilium/api/v1/client/bgp" "github.com/cilium/cilium/api/v1/client/daemon" "github.com/cilium/cilium/api/v1/client/endpoint" "github.com/cilium/cilium/api/v1/client/ipam" @@ -65,6 +66,7 @@ func New(transport runtime.ClientTransport, formats strfmt.Registry) *CiliumAPI cli := new(CiliumAPI) cli.Transport = transport + cli.Bgp = bgp.New(transport, formats) cli.Daemon = daemon.New(transport, formats) cli.Endpoint = endpoint.New(transport, formats) cli.Ipam = ipam.New(transport, formats) @@ -117,6 +119,8 @@ func (cfg *TransportConfig) WithSchemes(schemes []string) *TransportConfig { // CiliumAPI is a client for cilium API type CiliumAPI struct { + Bgp bgp.ClientService + Daemon daemon.ClientService Endpoint endpoint.ClientService @@ -139,6 +143,7 @@ type CiliumAPI struct { // SetTransport changes the transport on the client and all its subresources func (c *CiliumAPI) SetTransport(transport runtime.ClientTransport) { c.Transport = transport + c.Bgp.SetTransport(transport) c.Daemon.SetTransport(transport) c.Endpoint.SetTransport(transport) c.Ipam.SetTransport(transport) diff --git a/vendor/github.com/cilium/cilium/api/v1/flow/README.md b/vendor/github.com/cilium/cilium/api/v1/flow/README.md index 9cac9588df4..a8540cce80d 100644 --- a/vendor/github.com/cilium/cilium/api/v1/flow/README.md +++ b/vendor/github.com/cilium/cilium/api/v1/flow/README.md @@ -954,6 +954,7 @@ here. | NAT46 | 187 | | | NAT64 | 188 | | | AUTH_REQUIRED | 189 | | +| NO_EGRESS_GATEWAY | 194 | | diff --git a/vendor/github.com/cilium/cilium/api/v1/flow/flow.pb.go b/vendor/github.com/cilium/cilium/api/v1/flow/flow.pb.go index 45ea1bb32db..cad0de4b15c 100644 --- a/vendor/github.com/cilium/cilium/api/v1/flow/flow.pb.go +++ b/vendor/github.com/cilium/cilium/api/v1/flow/flow.pb.go @@ -411,6 +411,7 @@ const ( DropReason_NAT46 DropReason = 187 DropReason_NAT64 DropReason = 188 DropReason_AUTH_REQUIRED DropReason = 189 + DropReason_NO_EGRESS_GATEWAY DropReason = 194 ) // Enum value maps for DropReason. @@ -476,6 +477,7 @@ var ( 187: "NAT46", 188: "NAT64", 189: "AUTH_REQUIRED", + 194: "NO_EGRESS_GATEWAY", } DropReason_value = map[string]int32{ "DROP_REASON_UNKNOWN": 0, @@ -538,6 +540,7 @@ var ( "NAT46": 187, "NAT64": 188, "AUTH_REQUIRED": 189, + "NO_EGRESS_GATEWAY": 194, } ) @@ -4863,7 +4866,7 @@ var file_flow_flow_proto_rawDesc = []byte{ 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x44, 0x49, 0x54, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x52, 0x41, 0x43, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x4c, 0x41, 0x54, 0x45, 0x44, 0x10, 0x07, 0x2a, 0xaa, 0x0e, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, + 0x4c, 0x41, 0x54, 0x45, 0x44, 0x10, 0x07, 0x2a, 0xc2, 0x0e, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x52, 0x4f, 0x50, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, @@ -4978,178 +4981,179 @@ var file_flow_flow_proto_rawDesc = []byte{ 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xba, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x41, 0x54, 0x34, 0x36, 0x10, 0xbb, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x4e, 0x41, 0x54, 0x36, 0x34, 0x10, 0xbc, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, - 0x44, 0x10, 0xbd, 0x01, 0x2a, 0x4a, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x54, 0x52, 0x41, 0x46, - 0x46, 0x49, 0x43, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, - 0x2a, 0x8d, 0x02, 0x0a, 0x11, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, - 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, - 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x10, 0x04, 0x12, - 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x46, - 0x52, 0x4f, 0x4d, 0x5f, 0x4c, 0x42, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, - 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x56, 0x34, - 0x36, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, - 0x52, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x56, 0x36, 0x34, 0x10, 0x07, 0x12, 0x19, - 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x42, 0x47, - 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, - 0x4f, 0x53, 0x54, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, - 0x54, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x0a, 0x12, - 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x53, - 0x4e, 0x41, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x0b, 0x22, 0x04, 0x08, 0x01, 0x10, 0x03, - 0x2a, 0x39, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x73, 0x74, 0x10, 0x02, 0x2a, 0x7f, 0x0a, 0x0f, 0x4c, - 0x6f, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1d, - 0x0a, 0x19, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4c, 0x4f, 0x53, 0x54, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, - 0x16, 0x50, 0x45, 0x52, 0x46, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x49, 0x4e, 0x47, - 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x42, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x51, 0x55, 0x45, - 0x55, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x55, 0x42, 0x42, 0x4c, 0x45, 0x5f, 0x52, - 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x10, 0x03, 0x2a, 0xae, 0x02, 0x0a, - 0x0e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x17, 0x0a, 0x13, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x47, 0x45, 0x4e, - 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x50, - 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, - 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x1f, 0x0a, 0x1b, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, - 0x52, 0x45, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, - 0x53, 0x53, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, - 0x5f, 0x52, 0x45, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, - 0x55, 0x52, 0x45, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, - 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x45, - 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0x08, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x50, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x55, 0x50, 0x53, - 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x50, 0x43, 0x41, 0x43, - 0x48, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x45, 0x44, - 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x2a, 0xd8, 0x01, - 0x0a, 0x16, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4f, 0x43, 0x4b, - 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, - 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x44, - 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x57, 0x44, 0x10, 0x01, 0x12, 0x27, - 0x0a, 0x23, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, - 0x4e, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x46, 0x57, 0x44, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x4f, 0x43, 0x4b, 0x5f, - 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x5f, - 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x03, 0x12, - 0x27, 0x0a, 0x23, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, - 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x04, 0x2a, 0xdd, 0x0c, 0x0a, 0x0e, 0x44, 0x65, 0x62, - 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x44, - 0x42, 0x47, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x42, 0x47, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, - 0x43, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, - 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x44, - 0x42, 0x47, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, - 0x47, 0x5f, 0x4c, 0x58, 0x43, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, - 0x11, 0x44, 0x42, 0x47, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4e, 0x49, - 0x45, 0x44, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, - 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x43, - 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x07, 0x12, 0x10, - 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x08, - 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x44, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, - 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x32, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, - 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x10, 0x0b, 0x12, - 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x52, 0x45, 0x51, - 0x55, 0x45, 0x53, 0x54, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x43, - 0x4d, 0x50, 0x36, 0x5f, 0x4e, 0x53, 0x10, 0x0d, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, - 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, - 0x44, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, - 0x56, 0x45, 0x52, 0x44, 0x49, 0x43, 0x54, 0x10, 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x42, 0x47, - 0x5f, 0x44, 0x45, 0x43, 0x41, 0x50, 0x10, 0x10, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, - 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x10, 0x11, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, - 0x47, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x54, 0x10, 0x12, 0x12, 0x0f, 0x0a, - 0x0b, 0x44, 0x42, 0x47, 0x5f, 0x54, 0x4f, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x13, 0x12, 0x10, - 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x14, - 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x50, 0x4b, 0x54, 0x5f, 0x48, 0x41, 0x53, 0x48, - 0x10, 0x15, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, - 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x10, 0x16, 0x12, - 0x20, 0x0a, 0x1c, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, - 0x50, 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, - 0x17, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, - 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, - 0x10, 0x18, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, - 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, - 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x19, 0x12, 0x27, 0x0a, 0x23, 0x44, - 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, - 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x10, 0x1a, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, - 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x10, 0x1b, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, - 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, - 0x4b, 0x55, 0x50, 0x10, 0x1c, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, - 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x10, 0x1d, 0x12, 0x1b, - 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, - 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x10, 0x1e, 0x12, 0x20, 0x0a, 0x1c, 0x44, - 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, - 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x1f, 0x12, 0x1f, 0x0a, - 0x1b, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, - 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x10, 0x20, 0x12, 0x27, - 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, - 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x53, 0x55, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x21, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, - 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, - 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x22, - 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, - 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, - 0x23, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x52, 0x45, 0x56, - 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, - 0x24, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x52, 0x45, 0x56, - 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x10, 0x25, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, - 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x53, - 0x4e, 0x41, 0x54, 0x10, 0x26, 0x12, 0x1d, 0x0a, 0x19, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, - 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x4e, 0x41, 0x54, 0x5f, 0x52, - 0x45, 0x56, 0x10, 0x27, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, - 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x10, 0x28, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, - 0x52, 0x52, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, - 0x53, 0x45, 0x4c, 0x10, 0x29, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, 0x52, 0x45, 0x56, - 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x2a, 0x12, - 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x2b, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, - 0x52, 0x45, 0x56, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x10, 0x2c, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x34, 0x5f, 0x50, 0x4f, 0x4c, - 0x49, 0x43, 0x59, 0x10, 0x2d, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x4e, 0x45, 0x54, - 0x44, 0x45, 0x56, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x2e, - 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x4e, 0x45, 0x54, 0x44, 0x45, 0x56, 0x5f, 0x45, - 0x4e, 0x43, 0x41, 0x50, 0x34, 0x10, 0x2f, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, - 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x5f, 0x31, 0x10, 0x30, 0x12, 0x14, 0x0a, - 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x5f, - 0x32, 0x10, 0x31, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x44, 0x34, 0x10, 0x32, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, - 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x36, 0x5f, 0x31, 0x10, 0x33, 0x12, 0x14, - 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x36, - 0x5f, 0x32, 0x10, 0x34, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, - 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x36, 0x10, 0x35, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, - 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x36, 0x12, 0x11, 0x0a, - 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x34, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x37, - 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, - 0x50, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x34, 0x10, 0x38, 0x12, 0x19, 0x0a, 0x15, 0x44, - 0x42, 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x50, 0x5f, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x36, 0x10, 0x39, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x50, - 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x50, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x34, - 0x10, 0x3a, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, - 0x4d, 0x41, 0x50, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x36, 0x10, 0x3b, 0x12, 0x13, - 0x0a, 0x0f, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x4c, 0x45, 0x5f, 0x43, - 0x54, 0x10, 0x3c, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x4e, 0x48, 0x45, 0x52, - 0x49, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x3d, 0x12, 0x12, 0x0a, - 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x10, - 0x3e, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, - 0x55, 0x50, 0x36, 0x10, 0x3f, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x5f, - 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x40, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x69, 0x6c, 0x69, 0x75, 0x6d, 0x2f, 0x63, 0x69, - 0x6c, 0x69, 0x75, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6c, 0x6f, 0x77, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x44, 0x10, 0xbd, 0x01, 0x12, 0x16, 0x0a, 0x11, 0x4e, 0x4f, 0x5f, 0x45, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0xc2, 0x01, 0x2a, 0x4a, 0x0a, 0x10, + 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x19, 0x54, 0x52, 0x41, 0x46, 0x46, 0x49, 0x43, 0x5f, 0x44, 0x49, 0x52, 0x45, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, + 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, 0x2a, 0x8d, 0x02, 0x0a, 0x11, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, + 0x0a, 0x19, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x50, 0x4f, + 0x49, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, + 0x14, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, + 0x49, 0x56, 0x45, 0x52, 0x59, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x43, + 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4c, 0x42, 0x10, 0x05, + 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, + 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x56, 0x34, 0x36, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x44, + 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, + 0x5f, 0x56, 0x36, 0x34, 0x10, 0x07, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, + 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x52, 0x45, 0x10, + 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x09, 0x12, 0x18, 0x0a, + 0x14, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x4e, 0x41, + 0x54, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x43, + 0x41, 0x50, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x4e, 0x41, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, + 0x10, 0x0b, 0x22, 0x04, 0x08, 0x01, 0x10, 0x03, 0x2a, 0x39, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x73, + 0x74, 0x10, 0x02, 0x2a, 0x7f, 0x0a, 0x0f, 0x4c, 0x6f, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x5f, 0x4c, 0x4f, 0x53, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x45, 0x52, 0x46, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, 0x46, 0x46, 0x45, 0x52, 0x10, + 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, + 0x48, 0x55, 0x42, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, 0x46, 0x46, + 0x45, 0x52, 0x10, 0x03, 0x2a, 0xae, 0x02, 0x0a, 0x0e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x47, 0x45, 0x4e, 0x54, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x4f, 0x4c, 0x49, 0x43, + 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1f, 0x0a, 0x1b, 0x45, + 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, + 0x54, 0x45, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, + 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x4e, 0x45, 0x52, + 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x06, 0x12, 0x14, 0x0a, + 0x10, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x50, 0x43, + 0x41, 0x43, 0x48, 0x45, 0x5f, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, + 0x13, 0x0a, 0x0f, 0x49, 0x50, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, + 0x45, 0x44, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, + 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, + 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x22, + 0x04, 0x08, 0x01, 0x10, 0x01, 0x2a, 0xd8, 0x01, 0x0a, 0x16, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, + 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x26, + 0x0a, 0x22, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, + 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x46, 0x57, 0x44, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, + 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x5f, + 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x57, 0x44, 0x10, 0x02, 0x12, + 0x26, 0x0a, 0x22, 0x53, 0x4f, 0x43, 0x4b, 0x5f, 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, + 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x03, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x4f, 0x43, 0x4b, 0x5f, + 0x58, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x50, 0x4f, 0x53, 0x54, + 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x04, + 0x2a, 0xdd, 0x0c, 0x0a, 0x0e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x42, + 0x47, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, + 0x42, 0x47, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, + 0x59, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x42, 0x47, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, + 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x58, 0x43, 0x5f, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x50, 0x4f, 0x4c, + 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, + 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x06, 0x12, + 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, + 0x5f, 0x52, 0x45, 0x56, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, + 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, + 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, + 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x32, 0x10, + 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x48, + 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, 0x49, + 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x0c, 0x12, 0x10, + 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x4e, 0x53, 0x10, 0x0d, + 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x36, 0x5f, 0x54, 0x49, + 0x4d, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x12, 0x0a, + 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x56, 0x45, 0x52, 0x44, 0x49, 0x43, 0x54, 0x10, + 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x42, 0x47, 0x5f, 0x44, 0x45, 0x43, 0x41, 0x50, 0x10, 0x10, + 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x41, 0x50, + 0x10, 0x11, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x5f, + 0x52, 0x45, 0x54, 0x10, 0x12, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x42, 0x47, 0x5f, 0x54, 0x4f, 0x5f, + 0x48, 0x4f, 0x53, 0x54, 0x10, 0x13, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, 0x54, 0x4f, + 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x14, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x42, 0x47, 0x5f, + 0x50, 0x4b, 0x54, 0x5f, 0x48, 0x41, 0x53, 0x48, 0x10, 0x15, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, + 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, 0x4f, + 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x10, 0x16, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x42, 0x47, 0x5f, 0x4c, + 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, + 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x17, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, + 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, + 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x10, 0x18, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x42, + 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, + 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, + 0x53, 0x10, 0x19, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, + 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, + 0x4f, 0x54, 0x5f, 0x56, 0x32, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x1a, 0x12, 0x1f, 0x0a, 0x1b, + 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, + 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x1b, 0x12, 0x1e, 0x0a, + 0x1a, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, + 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x1c, 0x12, 0x17, 0x0a, + 0x13, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x36, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, + 0x5f, 0x4e, 0x41, 0x54, 0x10, 0x1d, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, + 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, 0x4e, + 0x44, 0x10, 0x1e, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, + 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x46, 0x52, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x10, 0x1f, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, + 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, + 0x53, 0x4c, 0x4f, 0x54, 0x10, 0x20, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, + 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, + 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x21, 0x12, + 0x27, 0x0a, 0x23, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, + 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x56, + 0x32, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x22, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x42, 0x47, 0x5f, + 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, + 0x4e, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x23, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x42, 0x47, + 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, + 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x24, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, + 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x5f, 0x4e, 0x41, 0x54, + 0x10, 0x25, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, + 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x4e, 0x41, 0x54, 0x10, 0x26, 0x12, 0x1d, 0x0a, + 0x19, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, + 0x4b, 0x5f, 0x53, 0x4e, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x27, 0x12, 0x12, 0x0a, 0x0e, + 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x10, 0x28, + 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x42, 0x47, 0x5f, 0x52, 0x52, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, + 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x4c, 0x10, 0x29, 0x12, 0x18, 0x0a, + 0x14, 0x44, 0x42, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x4c, + 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x10, 0x2a, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x42, 0x47, 0x5f, 0x52, + 0x45, 0x56, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x2b, + 0x12, 0x18, 0x0a, 0x14, 0x44, 0x42, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x5f, 0x50, 0x52, 0x4f, 0x58, + 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x2c, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, + 0x47, 0x5f, 0x4c, 0x34, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x2d, 0x12, 0x19, 0x0a, + 0x15, 0x44, 0x42, 0x47, 0x5f, 0x4e, 0x45, 0x54, 0x44, 0x45, 0x56, 0x5f, 0x49, 0x4e, 0x5f, 0x43, + 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x2e, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x42, 0x47, 0x5f, + 0x4e, 0x45, 0x54, 0x44, 0x45, 0x56, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x34, 0x10, 0x2f, 0x12, + 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, + 0x34, 0x5f, 0x31, 0x10, 0x30, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, + 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x5f, 0x32, 0x10, 0x31, 0x12, 0x13, 0x0a, 0x0f, 0x44, + 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x34, 0x10, 0x32, + 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, + 0x50, 0x36, 0x5f, 0x31, 0x10, 0x33, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, + 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x36, 0x5f, 0x32, 0x10, 0x34, 0x12, 0x13, 0x0a, 0x0f, + 0x44, 0x42, 0x47, 0x5f, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x36, 0x10, + 0x35, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x5f, 0x50, 0x52, + 0x4f, 0x58, 0x59, 0x10, 0x36, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x34, 0x5f, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x37, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, + 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x50, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x34, 0x10, 0x38, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, + 0x5f, 0x4d, 0x41, 0x50, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x36, 0x10, 0x39, 0x12, 0x1a, + 0x0a, 0x16, 0x44, 0x42, 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x50, 0x5f, + 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x34, 0x10, 0x3a, 0x12, 0x1a, 0x0a, 0x16, 0x44, 0x42, + 0x47, 0x5f, 0x49, 0x50, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x41, 0x50, 0x5f, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x45, 0x44, 0x36, 0x10, 0x3b, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x42, 0x47, 0x5f, 0x4c, 0x42, + 0x5f, 0x53, 0x54, 0x41, 0x4c, 0x45, 0x5f, 0x43, 0x54, 0x10, 0x3c, 0x12, 0x18, 0x0a, 0x14, 0x44, + 0x42, 0x47, 0x5f, 0x49, 0x4e, 0x48, 0x45, 0x52, 0x49, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, + 0x49, 0x54, 0x59, 0x10, 0x3d, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x5f, + 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x34, 0x10, 0x3e, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x42, 0x47, + 0x5f, 0x53, 0x4b, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x36, 0x10, 0x3f, 0x12, 0x11, 0x0a, + 0x0d, 0x44, 0x42, 0x47, 0x5f, 0x53, 0x4b, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x40, + 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, + 0x69, 0x6c, 0x69, 0x75, 0x6d, 0x2f, 0x63, 0x69, 0x6c, 0x69, 0x75, 0x6d, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6c, 0x6f, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/github.com/cilium/cilium/api/v1/flow/flow.proto b/vendor/github.com/cilium/cilium/api/v1/flow/flow.proto index 6309fc799c3..06e958e6e8a 100644 --- a/vendor/github.com/cilium/cilium/api/v1/flow/flow.proto +++ b/vendor/github.com/cilium/cilium/api/v1/flow/flow.proto @@ -353,6 +353,7 @@ enum DropReason { NAT46 = 187; NAT64 = 188; AUTH_REQUIRED = 189; + NO_EGRESS_GATEWAY = 194; } enum TrafficDirection { diff --git a/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer.go b/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer.go new file mode 100644 index 00000000000..d61fb6fe266 --- /dev/null +++ b/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer.go @@ -0,0 +1,138 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Copyright Authors of Cilium +// SPDX-License-Identifier: Apache-2.0 + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// BgpPeer State of a BGP Peer +// +// +k8s:deepcopy-gen=true +// +// swagger:model BgpPeer +type BgpPeer struct { + + // BGP peer address family state + Families []*BgpPeerFamilies `json:"families"` + + // Local AS Number + LocalAsn int64 `json:"local-asn,omitempty"` + + // IP Address of peer + PeerAddress string `json:"peer-address,omitempty"` + + // Peer AS Number + PeerAsn int64 `json:"peer-asn,omitempty"` + + // BGP peer operational state as described here + // https://www.rfc-editor.org/rfc/rfc4271#section-8.2.2 + // + SessionState string `json:"session-state,omitempty"` + + // BGP peer connection uptime in nano seconds. + UptimeNanoseconds int64 `json:"uptime-nanoseconds,omitempty"` +} + +// Validate validates this bgp peer +func (m *BgpPeer) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateFamilies(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *BgpPeer) validateFamilies(formats strfmt.Registry) error { + if swag.IsZero(m.Families) { // not required + return nil + } + + for i := 0; i < len(m.Families); i++ { + if swag.IsZero(m.Families[i]) { // not required + continue + } + + if m.Families[i] != nil { + if err := m.Families[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("families" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("families" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this bgp peer based on the context it is used +func (m *BgpPeer) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateFamilies(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *BgpPeer) contextValidateFamilies(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(m.Families); i++ { + + if m.Families[i] != nil { + if err := m.Families[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("families" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("families" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *BgpPeer) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *BgpPeer) UnmarshalBinary(b []byte) error { + var res BgpPeer + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer_families.go b/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer_families.go new file mode 100644 index 00000000000..aac6013add9 --- /dev/null +++ b/vendor/github.com/cilium/cilium/api/v1/models/bgp_peer_families.go @@ -0,0 +1,67 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Copyright Authors of Cilium +// SPDX-License-Identifier: Apache-2.0 + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// BgpPeerFamilies BGP AFI SAFI state of the peer +// +// +k8s:deepcopy-gen=true +// +// swagger:model BgpPeerFamilies +type BgpPeerFamilies struct { + + // Number of routes accepted from the peer of this address family + Accepted int64 `json:"accepted,omitempty"` + + // Number of routes advertised of this address family to the peer + Advertised int64 `json:"advertised,omitempty"` + + // BGP address family indicator + Afi string `json:"afi,omitempty"` + + // Number of routes received from the peer of this address family + Received int64 `json:"received,omitempty"` + + // BGP subsequent address family indicator + Safi string `json:"safi,omitempty"` +} + +// Validate validates this bgp peer families +func (m *BgpPeerFamilies) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this bgp peer families based on context it is used +func (m *BgpPeerFamilies) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *BgpPeerFamilies) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *BgpPeerFamilies) UnmarshalBinary(b []byte) error { + var res BgpPeerFamilies + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/vendor/github.com/cilium/cilium/api/v1/models/kube_proxy_replacement.go b/vendor/github.com/cilium/cilium/api/v1/models/kube_proxy_replacement.go index 3fedfb0e4ab..7d60f3b1032 100644 --- a/vendor/github.com/cilium/cilium/api/v1/models/kube_proxy_replacement.go +++ b/vendor/github.com/cilium/cilium/api/v1/models/kube_proxy_replacement.go @@ -283,6 +283,9 @@ func (m *KubeProxyReplacementDeviceListItems0) UnmarshalBinary(b []byte) error { // swagger:model KubeProxyReplacementFeatures type KubeProxyReplacementFeatures struct { + // flag bpf-lb-sock-hostns-only + BpfSocketLBHostnsOnly bool `json:"bpfSocketLBHostnsOnly,omitempty"` + // external i ps ExternalIPs *KubeProxyReplacementFeaturesExternalIPs `json:"externalIPs,omitempty"` diff --git a/vendor/github.com/cilium/cilium/api/v1/models/zz_generated.deepcopy.go b/vendor/github.com/cilium/cilium/api/v1/models/zz_generated.deepcopy.go index ea06698711f..931cb2eaad7 100644 --- a/vendor/github.com/cilium/cilium/api/v1/models/zz_generated.deepcopy.go +++ b/vendor/github.com/cilium/cilium/api/v1/models/zz_generated.deepcopy.go @@ -60,6 +60,49 @@ func (in *BandwidthManager) DeepCopy() *BandwidthManager { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BgpPeer) DeepCopyInto(out *BgpPeer) { + *out = *in + if in.Families != nil { + in, out := &in.Families, &out.Families + *out = make([]*BgpPeerFamilies, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(BgpPeerFamilies) + **out = **in + } + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BgpPeer. +func (in *BgpPeer) DeepCopy() *BgpPeer { + if in == nil { + return nil + } + out := new(BgpPeer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BgpPeerFamilies) DeepCopyInto(out *BgpPeerFamilies) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BgpPeerFamilies. +func (in *BgpPeerFamilies) DeepCopy() *BgpPeerFamilies { + if in == nil { + return nil + } + out := new(BgpPeerFamilies) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CIDRPolicy) DeepCopyInto(out *CIDRPolicy) { *out = *in diff --git a/vendor/github.com/cilium/cilium/pkg/annotation/k8s.go b/vendor/github.com/cilium/cilium/pkg/annotation/k8s.go index 950f468c2af..40dca3fc166 100644 --- a/vendor/github.com/cilium/cilium/pkg/annotation/k8s.go +++ b/vendor/github.com/cilium/cilium/pkg/annotation/k8s.go @@ -115,6 +115,10 @@ const ( // traffic to that node. WireguardPubKey = NetworkPrefix + "/wg-pub-key" WireguardPubKeyAlias = Prefix + ".network.wg-pub-key" + + // BGPVRouterAnnoPrefix is the prefix used for all Virtual Router annotations + // Its just a prefix, because the ASN of the Router is part of the annotation itself + BGPVRouterAnnoPrefix = "cilium.io/bgp-virtual-router." ) // Get returns the annotation value associated with the given key, or any of diff --git a/vendor/github.com/cilium/cilium/pkg/cgroups/manager/manager.go b/vendor/github.com/cilium/cilium/pkg/cgroups/manager/manager.go index fbcb684d16d..34aac2192c7 100644 --- a/vendor/github.com/cilium/cilium/pkg/cgroups/manager/manager.go +++ b/vendor/github.com/cilium/cilium/pkg/cgroups/manager/manager.go @@ -371,18 +371,12 @@ func (m *CgroupManager) deletePodMetadata(pod *v1.Pod) { func (m *CgroupManager) getPodMetadata(cgroupId uint64, podMetadataOut chan *PodMetadata) { cm, ok := m.containerMetadataByCgrpId[cgroupId] if !ok { - log.WithFields(logrus.Fields{ - "container-cgroup-id": cgroupId, - }).Debugf("Metadata not found") close(podMetadataOut) return } pm, ok := m.podMetadataById[cm.podId] if !ok { - log.WithFields(logrus.Fields{ - "container-cgroup-id": cgroupId, - }).Debugf("Pod metadata not found") close(podMetadataOut) return } diff --git a/vendor/github.com/cilium/cilium/pkg/client/client.go b/vendor/github.com/cilium/cilium/pkg/client/client.go index 18483ef2b63..0547961768f 100644 --- a/vendor/github.com/cilium/cilium/pkg/client/client.go +++ b/vendor/github.com/cilium/cilium/pkg/client/client.go @@ -608,6 +608,11 @@ func FormatStatusResponse(w io.Writer, sr *models.StatusResponse, sd StatusDetai socketLBTracing = "Enabled" } + socketLBCoverage := "Full" + if sr.KubeProxyReplacement.Features.BpfSocketLBHostnsOnly { + socketLBCoverage = "Hostns-only" + } + gracefulTerm := "Disabled" if sr.KubeProxyReplacement.Features.GracefulTermination.Enabled { gracefulTerm = "Enabled" @@ -633,6 +638,7 @@ func FormatStatusResponse(w io.Writer, sr *models.StatusResponse, sd StatusDetai fmt.Fprintf(tab, " Status:\t%s\n", sr.KubeProxyReplacement.Mode) fmt.Fprintf(tab, " Socket LB:\t%s\n", socketLB) fmt.Fprintf(tab, " Socket LB Tracing:\t%s\n", socketLBTracing) + fmt.Fprintf(tab, " Socket LB Coverage:\t%s\n", socketLBCoverage) if kubeProxyDevices != "" { fmt.Fprintf(tab, " Devices:\t%s\n", kubeProxyDevices) } diff --git a/vendor/github.com/cilium/cilium/pkg/controller/controller.go b/vendor/github.com/cilium/cilium/pkg/controller/controller.go index f691b42b67f..335dbecb690 100644 --- a/vendor/github.com/cilium/cilium/pkg/controller/controller.go +++ b/vendor/github.com/cilium/cilium/pkg/controller/controller.go @@ -50,6 +50,10 @@ type ControllerParams struct { // An unset DoFunc is an error and will be logged as one. DoFunc ControllerFunc + // CancelDoFuncOnUpdate when set to true cancels the controller context + // (the DoFunc) to allow quick termination of controller + CancelDoFuncOnUpdate bool + // StopFunc is called when the controller stops. It is intended to run any // clean-up tasks for the controller (e.g. deallocate/release resources) // It is guaranteed that DoFunc is called at least once before StopFunc is @@ -194,6 +198,7 @@ func (c *Controller) runController() { errorRetries := 1 c.mutex.RLock() + ctx := c.ctxDoFunc params := c.params c.mutex.RUnlock() runFunc := true @@ -208,7 +213,7 @@ func (c *Controller) runController() { interval = params.RunInterval start := time.Now() - err = params.DoFunc(c.ctxDoFunc) + err = params.DoFunc(ctx) duration := time.Since(start) c.mutex.Lock() @@ -216,6 +221,12 @@ func (c *Controller) runController() { c.getLogger().Debug("Controller func execution time: ", c.lastDuration) if err != nil { + if ctx.Err() != nil { + // The controller's context was canceled. Let's wait for the + // next controller update (or stop). + err = NewExitReason("controller context canceled") + } + switch err := err.(type) { case ExitReason: // This is actually not an error case, but it causes an exit @@ -289,6 +300,7 @@ func (c *Controller) runController() { // Pick up any changes to the parameters in case the controller has // been updated. c.mutex.RLock() + ctx = c.ctxDoFunc params = c.params c.mutex.RUnlock() runFunc = true @@ -318,6 +330,17 @@ shutdown: // // If the RunInterval exceeds ControllerMaxInterval, it will be capped. func (c *Controller) updateParamsLocked(params ControllerParams) { + if c.params.CancelDoFuncOnUpdate && c.cancelDoFunc != nil { + c.cancelDoFunc() + + // (re)set the context as the previous might have been cancelled + if params.Context == nil { + c.ctxDoFunc, c.cancelDoFunc = context.WithCancel(context.Background()) + } else { + c.ctxDoFunc, c.cancelDoFunc = context.WithCancel(params.Context) + } + } + c.params = params maxInterval := time.Duration(option.Config.MaxControllerInterval) * time.Second diff --git a/vendor/github.com/cilium/cilium/pkg/counter/counter.go b/vendor/github.com/cilium/cilium/pkg/counter/counter.go new file mode 100644 index 00000000000..16cc30acfa5 --- /dev/null +++ b/vendor/github.com/cilium/cilium/pkg/counter/counter.go @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright Authors of Cilium + +package counter + +// Counter tracks references for comparable . +// +// No thread safety is provided within this structure, the user is expected to +// handle concurrent access to this structure if it is used from multiple +// threads. +type Counter[T comparable] map[T]int + +// Add increments the reference count for the specified key. +func (c Counter[T]) Add(key T) bool { + value, exists := c[key] + c[key] = value + 1 + return !exists +} + +// Delete decrements the reference count for the specified key. +func (c Counter[T]) Delete(key T) bool { + value := c[key] + if value <= 1 { + delete(c, key) + return true + } + c[key] = value - 1 + return false +} + +// DeepCopy makes a new copy of the received Counter. +func (c Counter[T]) DeepCopy() Counter[T] { + result := make(Counter[T], len(c)) + for k, v := range c { + result[k] = v + } + return result +} + +// Deprecated. Use Counter[string] instead. +type StringCounter = Counter[string] diff --git a/vendor/github.com/cilium/cilium/pkg/counter/doc.go b/vendor/github.com/cilium/cilium/pkg/counter/doc.go new file mode 100644 index 00000000000..f1c5ff1533e --- /dev/null +++ b/vendor/github.com/cilium/cilium/pkg/counter/doc.go @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright Authors of Cilium + +// Package counter provides generic reference counter objects +package counter diff --git a/vendor/github.com/cilium/cilium/pkg/counter/integer.go b/vendor/github.com/cilium/cilium/pkg/counter/integer.go new file mode 100644 index 00000000000..91f5fe78e6a --- /dev/null +++ b/vendor/github.com/cilium/cilium/pkg/counter/integer.go @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright Authors of Cilium + +package counter + +import ( + "sort" +) + +// IntCounter tracks references for integers with an optional limiter. +// +// No threadsafety is provided within this structure, the user is expected to +// handle concurrent access to this structure if it is used from multiple +// threads. +type IntCounter Counter[int] + +// Add increments the reference count for the specified integer key. +func (i IntCounter) Add(key int) (changed bool) { + return Counter[int](i).Add(key) +} + +// Delete decrements the reference count for the specified integer key. +func (i IntCounter) Delete(key int) bool { + return Counter[int](i).Delete(key) +} + +// DeepCopy makes a new copy of the received IntCounter. +func (i IntCounter) DeepCopy() IntCounter { + return IntCounter(Counter[int](i).DeepCopy()) +} + +// ToBPFData returns the keys as a slice, sorted from high to low. +func (i IntCounter) ToBPFData() []int { + result := make([]int, 0, len(i)) + for key := range i { + result = append(result, key) + } + sort.Sort(sort.Reverse(sort.IntSlice(result))) + return result +} diff --git a/vendor/github.com/cilium/cilium/pkg/counter/prefixes.go b/vendor/github.com/cilium/cilium/pkg/counter/prefixes.go new file mode 100644 index 00000000000..401579bed7f --- /dev/null +++ b/vendor/github.com/cilium/cilium/pkg/counter/prefixes.go @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright Authors of Cilium + +package counter + +import ( + "fmt" + "net" + "net/netip" + + "github.com/cilium/cilium/pkg/lock" +) + +// PrefixLengthCounter tracks references to prefix lengths, limited by the +// maxUniquePrefixes count. Neither of the IPv4 or IPv6 counters nested within +// may contain more keys than the specified maximum number of unique prefixes. +type PrefixLengthCounter struct { + lock.RWMutex + + v4 IntCounter + v6 IntCounter + + maxUniquePrefixes4 int + maxUniquePrefixes6 int +} + +// NewPrefixLengthCounter returns a new PrefixLengthCounter which limits +// insertions to the specified maximum number of unique prefix lengths. +func NewPrefixLengthCounter(maxUniquePrefixes6, maxUniquePrefixes4 int) *PrefixLengthCounter { + return &PrefixLengthCounter{ + v4: make(IntCounter), + v6: make(IntCounter), + maxUniquePrefixes4: maxUniquePrefixes4, + maxUniquePrefixes6: maxUniquePrefixes6, + } +} + +func createIPNet(ones, bits int) netip.Prefix { + var addr netip.Addr + switch bits { + case net.IPv4len * 8: + addr = netip.IPv4Unspecified() + case net.IPv6len * 8: + addr = netip.IPv6Unspecified() + default: + // fall through to default library error + } + return netip.PrefixFrom(addr, ones) +} + +// DefaultPrefixLengthCounter creates a default prefix length counter that +// already counts the minimum and maximum prefix lengths for IP hosts and +// default routes (ie, /32 and /0). As with NewPrefixLengthCounter, inesrtions +// are limited to the specified maximum number of unique prefix lengths. +func DefaultPrefixLengthCounter(maxUniquePrefixes6, maxUniquePrefixes4 int) *PrefixLengthCounter { + counter := NewPrefixLengthCounter(maxUniquePrefixes6, maxUniquePrefixes4) + + defaultPrefixes := []netip.Prefix{ + // IPv4 + createIPNet(0, net.IPv4len*8), // world + createIPNet(net.IPv4len*8, net.IPv4len*8), // hosts + + // IPv6 + createIPNet(0, net.IPv6len*8), // world + createIPNet(net.IPv6len*8, net.IPv6len*8), // hosts + } + if _, err := counter.Add(defaultPrefixes); err != nil { + panic(fmt.Errorf("Failed to create default prefix lengths: %s", err)) + } + + return counter +} + +// checkLimits checks whether the specified new count of prefixes would exceed +// the specified limit on the maximum number of unique keys, and returns an +// error if it would exceed the limit. +func checkLimits(current, newCount, max int) error { + if newCount > max { + return fmt.Errorf("adding specified prefixes would result in too many prefix lengths (current: %d, result: %d, max: %d)", + current, newCount, max) + } + return nil +} + +// Add increments references to prefix lengths for the specified IPNets to the +// counter. If the maximum number of unique prefix lengths would be exceeded, +// returns an error. +// +// Returns true if adding these prefixes results in an increase in the total +// number of unique prefix lengths in the counter. +func (p *PrefixLengthCounter) Add(prefixes []netip.Prefix) (bool, error) { + p.Lock() + defer p.Unlock() + + // Assemble a map of references that need to be added + newV4Counter := p.v4.DeepCopy() + newV6Counter := p.v6.DeepCopy() + newV4Prefixes := false + newV6Prefixes := false + for _, prefix := range prefixes { + ones := prefix.Bits() + bits := prefix.Addr().BitLen() + + switch bits { + case net.IPv4len * 8: + if newV4Counter.Add(ones) { + newV4Prefixes = true + } + case net.IPv6len * 8: + if newV6Counter.Add(ones) { + newV6Prefixes = true + } + default: + return false, fmt.Errorf("unsupported IPAddr bitlength %d", bits) + } + } + + // Check if they can be added given the limit in place + if newV4Prefixes { + if err := checkLimits(len(p.v4), len(newV4Counter), p.maxUniquePrefixes4); err != nil { + return false, err + } + } + if newV6Prefixes { + if err := checkLimits(len(p.v6), len(newV6Counter), p.maxUniquePrefixes6); err != nil { + return false, err + } + } + + // Set and return whether anything changed + p.v4 = newV4Counter + p.v6 = newV6Counter + return newV4Prefixes || newV6Prefixes, nil +} + +// Delete reduces references to prefix lengths in the the specified IPNets from +// the counter. Returns true if removing references to these prefix lengths +// would result in a decrese in the total number of unique prefix lengths in +// the counter. +func (p *PrefixLengthCounter) Delete(prefixes []netip.Prefix) (changed bool) { + p.Lock() + defer p.Unlock() + + for _, prefix := range prefixes { + ones := prefix.Bits() + bits := prefix.Addr().BitLen() + switch bits { + case net.IPv4len * 8: + if p.v4.Delete(ones) { + changed = true + } + case net.IPv6len * 8: + if p.v6.Delete(ones) { + changed = true + } + } + } + + return changed +} + +// ToBPFData converts the counter into a set of prefix lengths that the BPF +// datapath can use for LPM lookup. +func (p *PrefixLengthCounter) ToBPFData() (s6, s4 []int) { + p.RLock() + defer p.RUnlock() + + return p.v6.ToBPFData(), p.v4.ToBPFData() +} diff --git a/vendor/github.com/cilium/cilium/pkg/defaults/defaults.go b/vendor/github.com/cilium/cilium/pkg/defaults/defaults.go index d473f50df32..6a91c1ac29e 100644 --- a/vendor/github.com/cilium/cilium/pkg/defaults/defaults.go +++ b/vendor/github.com/cilium/cilium/pkg/defaults/defaults.go @@ -226,6 +226,10 @@ const ( // EnableIPSec is the default value for IPSec enablement EnableIPSec = false + // Enable watcher for IPsec key. If disabled, a restart of the agent will + // be necessary on key rotations. + EnableIPsecKeyWatcher = true + // EncryptNode enables encrypting traffic from host networking applications // which are not part of Cilium manged pods. EncryptNode = false @@ -466,7 +470,7 @@ const ( CertsDirectory = RuntimePath + "/certs" // EnableRemoteNodeIdentity is the default value for option.EnableRemoteNodeIdentity - EnableRemoteNodeIdentity = false + EnableRemoteNodeIdentity = true // IPAMExpiration is the timeout after which an IP subject to expiratio // is being released again if no endpoint is being created in time. @@ -512,6 +516,9 @@ const ( // EnableICMPRules enables ICMP-based rule support for Cilium Network Policies. EnableICMPRules = true + // Use the CiliumInternalIPs (vs. NodeInternalIPs) for IPsec encapsulation. + UseCiliumInternalIPForIPsec = false + // TunnelPortVXLAN is the default VXLAN port TunnelPortVXLAN = 8472 // TunnelPortGeneve is the default Geneve port diff --git a/vendor/github.com/cilium/cilium/pkg/ip/cidr.go b/vendor/github.com/cilium/cilium/pkg/ip/cidr.go index 8d7548a3920..653358120c8 100644 --- a/vendor/github.com/cilium/cilium/pkg/ip/cidr.go +++ b/vendor/github.com/cilium/cilium/pkg/ip/cidr.go @@ -110,3 +110,23 @@ func IPsToNetPrefixes(ips []net.IP) []netip.Prefix { } return res } + +// NetsContainsAny checks that any subnet in the `a` subnet group *fully* +// contains any of the subnets in the `b` subnet group. +func NetsContainsAny(a, b []*net.IPNet) bool { + for _, an := range a { + aMask, _ := an.Mask.Size() + aIsIPv4 := an.IP.To4() != nil + for _, bn := range b { + bIsIPv4 := bn.IP.To4() != nil + isSameFamily := aIsIPv4 == bIsIPv4 + if isSameFamily { + bMask, _ := bn.Mask.Size() + if bMask >= aMask && an.Contains(bn.IP) { + return true + } + } + } + } + return false +} diff --git a/vendor/github.com/cilium/cilium/pkg/ipcache/ipcache.go b/vendor/github.com/cilium/cilium/pkg/ipcache/ipcache.go index dfee0801890..d20e2883720 100644 --- a/vendor/github.com/cilium/cilium/pkg/ipcache/ipcache.go +++ b/vendor/github.com/cilium/cilium/pkg/ipcache/ipcache.go @@ -7,6 +7,7 @@ import ( "context" "net" "net/netip" + "sync/atomic" "time" "github.com/sirupsen/logrus" @@ -62,7 +63,7 @@ type Configuration struct { cache.IdentityAllocator ipcacheTypes.PolicyHandler ipcacheTypes.DatapathHandler - ipcacheTypes.NodeHandler + ipcacheTypes.NodeIDHandler } // IPCache is a collection of mappings: @@ -81,18 +82,18 @@ type IPCache struct { // controllers manages the async controllers for this IPCache controllers *controller.Manager - // needNamedPorts is initially 'false', but will be changd to 'true' when the - // clusterwide named port mappings are needed for network policy computation - // for the first time. This avoids the overhead of maintaining 'namedPorts' map - // when it is known not to be needed. - // Protected by 'mutex'. - needNamedPorts bool + // needNamedPorts is initially 'false', but will atomically be changed to 'true' + // when the clusterwide named port mappings are needed for network policy + // computation for the first time. This avoids the overhead of unnecessarily + // triggering policy updates when it is known not to be needed. + needNamedPorts atomic.Bool // namedPorts is a collection of all named ports in the cluster. This is needed // only if an egress policy refers to a port by name. - // This map is returned to users so all updates must be made into a fresh map that - // is then swapped in place while 'mutex' is being held. - namedPorts types.NamedPortMultiMap + // This map is returned (read-only, as a NamedPortMultiMap) to users. + // Therefore, all updates must be made atomically, which is guaranteed by the + // interface. + namedPorts namedPortMultiMapUpdater // k8sSyncedChecker knows how to check for whether the K8s watcher cache // has been fully synced. @@ -121,7 +122,7 @@ func NewIPCache(c *Configuration) *IPCache { ipToHostIPCache: map[string]IPKeyPair{}, ipToK8sMetadata: map[string]K8sMetadata{}, controllers: controller.NewManager(), - namedPorts: nil, + namedPorts: types.NewNamedPortMultiMap(), metadata: newMetadata(), Configuration: c, } @@ -216,33 +217,6 @@ func (ipc *IPCache) getK8sMetadata(ip string) *K8sMetadata { return nil } -// updateNamedPorts accumulates named ports from all K8sMetadata entries to a single map -func (ipc *IPCache) updateNamedPorts() (namedPortsChanged bool) { - if !ipc.needNamedPorts { - return false - } - // Collect new named Ports - npm := make(types.NamedPortMultiMap, len(ipc.namedPorts)) - for _, km := range ipc.ipToK8sMetadata { - for name, port := range km.NamedPorts { - if npm[name] == nil { - npm[name] = make(types.PortProtoSet) - } - npm[name][port] = struct{}{} - } - } - namedPortsChanged = !npm.Equal(ipc.namedPorts) - if namedPortsChanged { - // swap the new map in - if len(npm) == 0 { - ipc.namedPorts = nil - } else { - ipc.namedPorts = npm - } - } - return namedPortsChanged -} - // Upsert adds / updates the provided IP (endpoint or CIDR prefix) and identity // into the IPCache. // @@ -400,28 +374,10 @@ func (ipc *IPCache) upsertLocked( } else { ipc.ipToK8sMetadata[ip] = *k8sMeta } - - // Update named ports, first check for deleted values - for k := range oldK8sMeta.NamedPorts { - if _, ok := newNamedPorts[k]; !ok { - namedPortsChanged = true - break - } - } - if !namedPortsChanged { - // Check for added new or changed entries - for k, v := range newNamedPorts { - if v2, ok := oldK8sMeta.NamedPorts[k]; !ok || v2 != v { - namedPortsChanged = true - break - } - } - } - if namedPortsChanged { - // It is possible that some other POD defines same values, check if - // anything changes over all the PODs. - namedPortsChanged = ipc.updateNamedPorts() - } + // Update the named ports reference counting, but don't cause policy + // updates if no policy uses named ports. + namedPortsChanged = ipc.namedPorts.Update(oldK8sMeta.NamedPorts, newNamedPorts) + namedPortsChanged = namedPortsChanged && ipc.needNamedPorts.Load() } if hostIP != nil { @@ -595,7 +551,9 @@ func (ipc *IPCache) deleteLocked(ip string, source source.Source) (namedPortsCha // Update named ports namedPortsChanged = false if oldK8sMeta != nil && len(oldK8sMeta.NamedPorts) > 0 { - namedPortsChanged = ipc.updateNamedPorts() + namedPortsChanged = ipc.namedPorts.Update(oldK8sMeta.NamedPorts, nil) + // Only trigger policy updates if named ports are used in policy. + namedPortsChanged = namedPortsChanged && ipc.needNamedPorts.Load() } if newHostIP != nil { @@ -617,16 +575,20 @@ func (ipc *IPCache) deleteLocked(ip string, source source.Source) (namedPortsCha // GetNamedPorts returns a copy of the named ports map. May return nil. func (ipc *IPCache) GetNamedPorts() (npm types.NamedPortMultiMap) { - ipc.mutex.Lock() - if !ipc.needNamedPorts { - ipc.needNamedPorts = true - ipc.updateNamedPorts() - } - // Caller can keep using the map after the lock is released, as the map is never changed - // once published. - npm = ipc.namedPorts - ipc.mutex.Unlock() - return npm + // We must not acquire the IPCache mutex here, as that would establish a lock ordering of + // Endpoint > IPCache (as endpoint.mutex can be held while calling GetNamedPorts) + // Since InjectLabels requires IPCache > Endpoint, a deadlock can occur otherwise. + + // needNamedPorts is initially set to 'false'. This means that we will not trigger + // policy updates upon changes to named ports. Once this is set to 'true' though, + // Upsert and Delete will start to return 'namedPortsChanged = true' if the upsert + // or delete changed a named port, enabling the caller to trigger a policy update. + // Note that at the moment, this will never be set back to false, even if no policy + // uses named ports anymore. + ipc.needNamedPorts.Store(true) + + // Caller can keep using the map, operations on it are protected by its mutex. + return ipc.namedPorts } // DeleteOnMetadataMatch removes the provided IP to security identity mapping from the IPCache diff --git a/vendor/github.com/cilium/cilium/pkg/ipcache/metadata.go b/vendor/github.com/cilium/cilium/pkg/ipcache/metadata.go index a96912294a2..0d7a634a19c 100644 --- a/vendor/github.com/cilium/cilium/pkg/ipcache/metadata.go +++ b/vendor/github.com/cilium/cilium/pkg/ipcache/metadata.go @@ -176,6 +176,9 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P entriesToReplace = make(map[netip.Prefix]Identity) entriesToDelete = make(map[netip.Prefix]Identity) forceIPCacheUpdate = make(map[netip.Prefix]bool) // prefix => force + + // Just used to silence a warning where it is safe + oldIDs = make(map[netip.Prefix]Identity) ) ipc.metadata.RLock() @@ -189,12 +192,11 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P continue } // else continue below to remove the old entry } else { + oldIDs[prefix] = id var newID *identity.Identity - lbls := prefixInfo.ToLabels() - // Insert to propagate the updated set of labels after removal. - newID, _, err = ipc.injectLabels(ctx, prefix, lbls) + newID, _, err = ipc.injectLabels(ctx, prefix, prefixInfo.ToLabels()) if err != nil { // NOTE: This may fail during a 2nd or later // iteration of the loop. To handle this, break @@ -209,7 +211,7 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P log.WithError(err).WithFields(logrus.Fields{ logfields.IPAddr: prefix, logfields.Identity: id, - logfields.Labels: lbls, // new labels + logfields.Labels: newID.Labels, // new labels }).Warning( "Failed to allocate new identity while handling change in labels associated with a prefix.", ) @@ -218,17 +220,14 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P break } - // It's plausible to pull the same information twice - // from different sources, for instance in etcd mode - // where node information is propagated both via the - // kvstore and via the k8s control plane. If the new - // security identity is the same as the one currently - // being used, then no need to update it. - if id.ID == newID.ID { + // We can safely skip the ipcache upsert if the ID and source + // in the metadata cache match the ipcache exactly. + // Note that checking ID alone is insufficient, see GH-24502 + if id.ID == newID.ID && prefixInfo.Source() == id.Source { goto releaseIdentity } - idsToAdd[newID.ID] = lbls.LabelArray() + idsToAdd[newID.ID] = newID.Labels.LabelArray() entriesToReplace[prefix] = Identity{ ID: newID.ID, Source: prefixInfo.Source(), @@ -239,7 +238,7 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P // have now been removed, then we need to explicitly // work around that to remove the old higher-priority // identity and replace it with this new identity. - if entryExists && prefixInfo.Source() != id.Source { + if entryExists && prefixInfo.Source() != id.Source && id.ID != newID.ID { forceIPCacheUpdate[prefix] = true } } @@ -279,10 +278,23 @@ func (ipc *IPCache) InjectLabels(ctx context.Context, modifiedPrefixes []netip.P id, forceIPCacheUpdate[p], ); err2 != nil { - log.WithError(err2).WithFields(logrus.Fields{ - logfields.IPAddr: prefix, - logfields.Identity: id, - }).Error("Failed to replace ipcache entry with new identity after label removal. Traffic may be disrupted.") + // It's plausible to pull the same information twice + // from different sources, for instance in etcd mode + // where node information is propagated both via the + // kvstore and via the k8s control plane. If the + // upsert was rejected due to source precedence, but the + // identity is unchanged, then we can safely ignore the + // error message. + oldID, ok := oldIDs[p] + if !(ok && oldID.ID == id.ID && errors.Is(err2, &ErrOverwrite{ + ExistingSrc: oldID.Source, + NewSrc: id.Source, + })) { + log.WithError(err2).WithFields(logrus.Fields{ + logfields.IPAddr: prefix, + logfields.Identity: id, + }).Error("Failed to replace ipcache entry with new identity after label removal. Traffic may be disrupted.") + } } } @@ -360,6 +372,17 @@ func (ipc *IPCache) UpdatePolicyMaps(ctx context.Context, addedIdentities, delet // account for the new kube-apiserver label that will be attached to them. This // is a known issue, see GH-17962 below. func (ipc *IPCache) injectLabels(ctx context.Context, prefix netip.Prefix, lbls labels.Labels) (*identity.Identity, bool, error) { + if lbls.Has(labels.LabelWorld[labels.IDNameWorld]) && + (lbls.Has(labels.LabelRemoteNode[labels.IDNameRemoteNode]) || + lbls.Has(labels.LabelHost[labels.IDNameHost])) { + // If the prefix is associated with both world and (remote-node or + // host), then the latter (remote-node or host) take precedence to + // avoid allocating a CIDR identity for an entity within the cluster. + n := lbls.Remove(labels.LabelWorld) + n = n.Remove(cidrlabels.GetCIDRLabels(prefix)) + lbls = n + } + if lbls.Has(labels.LabelHost[labels.IDNameHost]) { // Associate any new labels with the host identity. // @@ -459,7 +482,7 @@ func (m *metadata) filterByLabels(filter labels.Labels) []netip.Prefix { // This function assumes that the ipcache metadata lock is held for writing. func (m *metadata) remove(prefix netip.Prefix, resource types.ResourceID, aux ...IPMetadata) { info, ok := m.m[prefix] - if !ok { + if !ok || info[resource] == nil { return } for _, a := range aux { diff --git a/vendor/github.com/cilium/cilium/pkg/ipcache/types.go b/vendor/github.com/cilium/cilium/pkg/ipcache/types.go index 7c427c37c9e..ed40f55300f 100644 --- a/vendor/github.com/cilium/cilium/pkg/ipcache/types.go +++ b/vendor/github.com/cilium/cilium/pkg/ipcache/types.go @@ -4,16 +4,17 @@ package ipcache import ( - "github.com/cilium/cilium/pkg/ipcache/types" + ipcacheTypes "github.com/cilium/cilium/pkg/ipcache/types" "github.com/cilium/cilium/pkg/labels" "github.com/cilium/cilium/pkg/source" + "github.com/cilium/cilium/pkg/types" ) // prefixInfo holds all of the information (labels, etc.) about a given prefix // independently based on the ResourceID of the origin of that information, and // provides convenient accessors to consistently merge the stored information // to generate ipcache output based on a range of inputs. -type prefixInfo map[types.ResourceID]*resourceInfo +type prefixInfo map[ipcacheTypes.ResourceID]*resourceInfo // resourceInfo is all of the information that has been collected from a given // resource (types.ResourceID) about this IP. Each field must have a 'zero' @@ -34,6 +35,13 @@ type resourceInfo struct { // gets injected into the IPCache. type IPMetadata any +// namedPortMultiMapUpdater allows for mutation of the NamedPortMultiMap, which +// is otherwise read-only. +type namedPortMultiMapUpdater interface { + types.NamedPortMultiMap + Update(old, new types.NamedPortMap) (namedPortChanged bool) +} + // merge overwrites the field in 'resourceInfo' corresponding to 'info'. This // associates the new information with the prefix and ResourceID that this // 'resourceInfo' resides under in the outer metadata map. diff --git a/vendor/github.com/cilium/cilium/pkg/ipcache/types/types.go b/vendor/github.com/cilium/cilium/pkg/ipcache/types/types.go index 4fb9d47b672..757435395c9 100644 --- a/vendor/github.com/cilium/cilium/pkg/ipcache/types/types.go +++ b/vendor/github.com/cilium/cilium/pkg/ipcache/types/types.go @@ -57,7 +57,7 @@ func NewResourceID(kind ResourceKind, namespace, name string) ResourceID { return ResourceID(str.String()) } -// NodeHandler is responsible for the management of node identities. -type NodeHandler interface { +// NodeIDHandler is responsible for the management of node identities. +type NodeIDHandler interface { AllocateNodeID(net.IP) uint16 } diff --git a/vendor/github.com/cilium/cilium/pkg/kvstore/etcd.go b/vendor/github.com/cilium/cilium/pkg/kvstore/etcd.go index d9c6ea9e1f3..e1b1310240c 100644 --- a/vendor/github.com/cilium/cilium/pkg/kvstore/etcd.go +++ b/vendor/github.com/cilium/cilium/pkg/kvstore/etcd.go @@ -671,6 +671,8 @@ func connectEtcdClient(ctx context.Context, config *client.Config, cfgPath strin shuffleEndpoints(config.Endpoints) } + // Set client context so that client can be cancelled from outside + config.Context = ctx // Set DialTimeout to 0, otherwise the creation of a new client will // block until DialTimeout is reached or a connection to the server // is made. @@ -785,6 +787,8 @@ func connectEtcdClient(ctx context.Context, config *client.Config, cfgPath strin ec.lastHeartbeat = time.Now() ec.RWMutex.Unlock() log.Debug("Received update notification of heartbeat") + case <-ctx.Done(): + return } } }() @@ -932,6 +936,19 @@ func (e *etcdClient) Watch(ctx context.Context, w *Watcher) { localCache := watcherCache{} listSignalSent := false + defer func() { + close(w.Events) + w.stopWait.Done() + + // The watch might be aborted by closing + // the context instead of calling + // w.Stop() from outside. In that case + // we make sure to close everything and + // as this uses sync.Once it can be + // run multiple times (if that's the case). + w.Stop() + }() + scopedLog := e.getLogger().WithFields(logrus.Fields{ fieldWatcher: w, fieldPrefix: w.Prefix, @@ -1039,10 +1056,7 @@ reList: case <-ctx.Done(): return case <-w.stopWatch: - close(w.Events) - w.stopWait.Done() return - case r, ok := <-etcdWatch: if !ok { time.Sleep(50 * time.Millisecond) @@ -1184,7 +1198,13 @@ func (e *etcdClient) statusChecker() { e.statusLock.Unlock() if e.latestErrorStatus != nil { - e.statusCheckErrors <- e.latestErrorStatus + select { + case e.statusCheckErrors <- e.latestErrorStatus: + default: + // Channel's buffer is full, skip sending errors to the channel but log warnings instead + log.WithError(e.latestErrorStatus). + Warning("Status check error channel is full, dropping this error") + } } select { diff --git a/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go b/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go index 6061acecb15..08b34572097 100644 --- a/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go +++ b/vendor/github.com/cilium/cilium/pkg/logging/logfields/logfields.go @@ -225,6 +225,9 @@ const ( // Hash is a hash of something Hash = "hash" + // ServerNames is the list of TLS SNIs + ServerNames = "serverNames" + // ServiceName is the orchestration framework name for a service ServiceName = "serviceName" @@ -614,6 +617,10 @@ const ( // SourceIP is a source IP SourceIP = "sourceIP" + DestinationIP = "destinationIP" + + SourceCIDR = "sourceCIDR" + // DestinationCIDR is a destination CIDR DestinationCIDR = "destinationCIDR" @@ -629,6 +636,13 @@ const ( // Number of Backends failed while restoration. FailedBackends = "failedBackends" + // SkippedBackends is the number of Backends that were skipped during restore + // as duplicates. + SkippedBackends = "skippedBackends" + + // OrphanBackends is the number Backends that are not associated with any services. + OrphanBackends = "orphanBackends" + // Number of Services failed while restoration. RestoredSVCs = "restoredServices" diff --git a/vendor/github.com/cilium/cilium/pkg/monitor/api/drop.go b/vendor/github.com/cilium/cilium/pkg/monitor/api/drop.go index 0f0f0a7bf7d..9af08d9961f 100644 --- a/vendor/github.com/cilium/cilium/pkg/monitor/api/drop.go +++ b/vendor/github.com/cilium/cilium/pkg/monitor/api/drop.go @@ -85,6 +85,7 @@ var errors = map[uint8]string{ 187: "L3 translation from IPv4 to IPv6 failed (NAT46)", 188: "L3 translation from IPv6 to IPv4 failed (NAT64)", 189: "Authentication required", + 194: "No egress gateway found", } func extendedReason(reason uint8, extError int8) string { diff --git a/vendor/github.com/cilium/cilium/pkg/node/types/node.go b/vendor/github.com/cilium/cilium/pkg/node/types/node.go index 4f8da381dc1..aeee553d655 100644 --- a/vendor/github.com/cilium/cilium/pkg/node/types/node.go +++ b/vendor/github.com/cilium/cilium/pkg/node/types/node.go @@ -7,6 +7,7 @@ import ( "encoding/json" "net" "path" + "strings" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -83,6 +84,23 @@ func ParseCiliumNode(n *ciliumv2.CiliumNode) (node Node) { return } +// GetCiliumAnnotations returns the node annotations that should be set on the CiliumNode +func (n *Node) GetCiliumAnnotations() map[string]string { + annotations := map[string]string{} + if n.WireguardPubKey != "" { + annotations[annotation.WireguardPubKey] = n.WireguardPubKey + } + + // if we use a cilium node instead of a node, we also need the BGP Control Plane annotations in the cilium node instead of the main node + for k, a := range n.Annotations { + if strings.HasPrefix(k, annotation.BGPVRouterAnnoPrefix) { + annotations[k] = a + } + } + + return annotations +} + // ToCiliumNode converts the node to a CiliumNode func (n *Node) ToCiliumNode() *ciliumv2.CiliumNode { var ( @@ -90,7 +108,6 @@ func (n *Node) ToCiliumNode() *ciliumv2.CiliumNode { ipAddrs []ciliumv2.NodeAddress healthIPv4, healthIPv6 string ingressIPv4, ingressIPv6 string - annotations = map[string]string{} ) if n.IPv4AllocCIDR != nil { @@ -125,15 +142,11 @@ func (n *Node) ToCiliumNode() *ciliumv2.CiliumNode { }) } - if n.WireguardPubKey != "" { - annotations[annotation.WireguardPubKey] = n.WireguardPubKey - } - return &ciliumv2.CiliumNode{ ObjectMeta: v1.ObjectMeta{ Name: n.Name, Labels: n.Labels, - Annotations: annotations, + Annotations: n.GetCiliumAnnotations(), }, Spec: ciliumv2.NodeSpec{ Addresses: ipAddrs, diff --git a/vendor/github.com/cilium/cilium/pkg/option/config.go b/vendor/github.com/cilium/cilium/pkg/option/config.go index 086d9321666..5ef1c7e300a 100644 --- a/vendor/github.com/cilium/cilium/pkg/option/config.go +++ b/vendor/github.com/cilium/cilium/pkg/option/config.go @@ -729,6 +729,10 @@ const ( // EnableIPSecName is the name of the option to enable IPSec EnableIPSecName = "enable-ipsec" + // Enable watcher for IPsec key. If disabled, a restart of the agent will + // be necessary on key rotations. + EnableIPsecKeyWatcher = "enable-ipsec-key-watcher" + // IPSecKeyFileName is the name of the option for ipsec key file IPSecKeyFileName = "ipsec-key-file" @@ -1070,6 +1074,9 @@ const ( // EnableICMPRules enables ICMP-based rule support for Cilium Network Policies. EnableICMPRules = "enable-icmp-rules" + // Use the CiliumInternalIPs (vs. NodeInternalIPs) for IPsec encapsulation. + UseCiliumInternalIPForIPsec = "use-cilium-internal-ip-for-ipsec" + // BypassIPAvailabilityUponRestore bypasses the IP availability error // within IPAM upon endpoint restore and allows the use of the restored IP // regardless of whether it's available in the pool. @@ -1601,6 +1608,10 @@ type DaemonConfig struct { // IPSec key file for stored keys IPSecKeyFile string + // Enable watcher for IPsec key. If disabled, a restart of the agent will + // be necessary on key rotations. + EnableIPsecKeyWatcher bool + // EnableWireguard enables Wireguard encryption EnableWireguard bool @@ -2255,6 +2266,9 @@ type DaemonConfig struct { // EnableICMPRules enables ICMP-based rule support for Cilium Network Policies. EnableICMPRules bool + // Use the CiliumInternalIPs (vs. NodeInternalIPs) for IPsec encapsulation. + UseCiliumInternalIPForIPsec bool + // BypassIPAvailabilityUponRestore bypasses the IP availability error // within IPAM upon endpoint restore and allows the use of the restored IP // regardless of whether it's available in the pool. @@ -2341,6 +2355,7 @@ var ( K8sEnableK8sEndpointSlice: defaults.K8sEnableEndpointSlice, AllocatorListTimeout: defaults.AllocatorListTimeout, EnableICMPRules: defaults.EnableICMPRules, + UseCiliumInternalIPForIPsec: defaults.UseCiliumInternalIPForIPsec, K8sEnableLeasesFallbackDiscovery: defaults.K8sEnableLeasesFallbackDiscovery, APIRateLimit: make(map[string]string), @@ -2962,6 +2977,7 @@ func (c *DaemonConfig) Populate(vp *viper.Viper) { c.IPTablesLockTimeout = vp.GetDuration(IPTablesLockTimeout) c.IPTablesRandomFully = vp.GetBool(IPTablesRandomFully) c.IPSecKeyFile = vp.GetString(IPSecKeyFileName) + c.EnableIPsecKeyWatcher = vp.GetBool(EnableIPsecKeyWatcher) c.EnableMonitor = vp.GetBool(EnableMonitorName) c.MonitorAggregation = vp.GetString(MonitorAggregationName) c.MonitorAggregationInterval = vp.GetDuration(MonitorAggregationInterval) @@ -3329,6 +3345,7 @@ func (c *DaemonConfig) Populate(vp *viper.Viper) { c.EndpointGCInterval = vp.GetDuration(EndpointGCInterval) c.DisableCNPStatusUpdates = vp.GetBool(DisableCNPStatusUpdates) c.EnableICMPRules = vp.GetBool(EnableICMPRules) + c.UseCiliumInternalIPForIPsec = vp.GetBool(UseCiliumInternalIPForIPsec) c.BypassIPAvailabilityUponRestore = vp.GetBool(BypassIPAvailabilityUponRestore) c.EnableK8sTerminatingEndpoint = vp.GetBool(EnableK8sTerminatingEndpoint) c.EnableStaleCiliumEndpointCleanup = vp.GetBool(EnableStaleCiliumEndpointCleanup) diff --git a/vendor/github.com/cilium/cilium/pkg/types/portmap.go b/vendor/github.com/cilium/cilium/pkg/types/portmap.go index 562c8ed03bc..86ab9f44636 100644 --- a/vendor/github.com/cilium/cilium/pkg/types/portmap.go +++ b/vendor/github.com/cilium/cilium/pkg/types/portmap.go @@ -8,7 +8,9 @@ import ( "fmt" "strings" + "github.com/cilium/cilium/pkg/counter" "github.com/cilium/cilium/pkg/iana" + "github.com/cilium/cilium/pkg/lock" "github.com/cilium/cilium/pkg/u8proto" ) @@ -30,8 +32,8 @@ type PortProto struct { // NamedPortMap maps port names to port numbers and protocols. type NamedPortMap map[string]PortProto -// PortProtoSet is a set of unique PortProto values. -type PortProtoSet map[PortProto]struct{} +// PortProtoSet is a reference-counted set of unique PortProto values. +type PortProtoSet counter.Counter[PortProto] // Equal returns true if the PortProtoSets are equal. func (pps PortProtoSet) Equal(other PortProtoSet) bool { @@ -47,21 +49,70 @@ func (pps PortProtoSet) Equal(other PortProtoSet) bool { return true } +// Add increments the reference count for the specified key. +func (pps PortProtoSet) Add(pp PortProto) bool { + return counter.Counter[PortProto](pps).Add(pp) +} + +// Delete decrements the reference count for the specified key. +func (pps PortProtoSet) Delete(pp PortProto) bool { + return counter.Counter[PortProto](pps).Delete(pp) +} + // NamedPortMultiMap may have multiple entries for a name if multiple PODs // define the same name with different values. -type NamedPortMultiMap map[string]PortProtoSet +type NamedPortMultiMap interface { + // GetNamedPort returns the port number for the named port, if any. + GetNamedPort(name string, proto uint8) (uint16, error) + // Len returns the number of Name->PortProtoSet mappings known. + Len() int +} -// Equal returns true if the NamedPortMultiMaps are equal. -func (npm NamedPortMultiMap) Equal(other NamedPortMultiMap) bool { - if len(npm) != len(other) { - return false +func NewNamedPortMultiMap() *namedPortMultiMap { + return &namedPortMultiMap{ + m: make(map[string]PortProtoSet), } - for name, ports := range npm { - if otherPorts, exists := other[name]; !exists || !ports.Equal(otherPorts) { - return false +} + +// Implements NamedPortMultiMap and allows changes through Update. All accesses +// must be protected by its RW mutex. +type namedPortMultiMap struct { + lock.RWMutex + m map[string]PortProtoSet +} + +func (npm *namedPortMultiMap) Len() int { + npm.RLock() + defer npm.RUnlock() + return len(npm.m) +} + +// Update applies potential changes in named ports, and returns whether there were any. +func (npm *namedPortMultiMap) Update(old, new NamedPortMap) (namedPortsChanged bool) { + npm.Lock() + defer npm.Unlock() + // The order is important here. Increment the refcount first, and then + // decrement it again for old ports, so that we don't hit zero if there are + // no changes. + for name, port := range new { + c, ok := npm.m[name] + if !ok { + c = make(PortProtoSet) + npm.m[name] = c + } + if c.Add(port) { + namedPortsChanged = true } } - return true + for name, port := range old { + if npm.m[name].Delete(port) { + namedPortsChanged = true + if len(npm.m[name]) == 0 { + delete(npm.m, name) + } + } + } + return namedPortsChanged } // ValidatePortName checks that the port name conforms to the IANA Service Names spec @@ -129,11 +180,16 @@ func (npm NamedPortMap) GetNamedPort(name string, proto uint8) (uint16, error) { } // GetNamedPort returns the port number for the named port, if any. -func (npm NamedPortMultiMap) GetNamedPort(name string, proto uint8) (uint16, error) { +func (npm *namedPortMultiMap) GetNamedPort(name string, proto uint8) (uint16, error) { if npm == nil { return 0, ErrNilMap } - pps, ok := npm[name] + npm.RLock() + defer npm.RUnlock() + if npm.m == nil { + return 0, ErrNilMap + } + pps, ok := npm.m[name] if !ok { // Return an error the caller can filter out as this happens only for egress policy // and it is likely the destination POD with the port name is simply not scheduled yet. diff --git a/vendor/modules.txt b/vendor/modules.txt index 4d0b8a38b01..05edf28caba 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -15,9 +15,10 @@ github.com/blang/semver/v4 # github.com/cespare/xxhash/v2 v2.2.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 -# github.com/cilium/cilium v1.13.1 +# github.com/cilium/cilium v1.13.4 ## explicit; go 1.19 github.com/cilium/cilium/api/v1/client +github.com/cilium/cilium/api/v1/client/bgp github.com/cilium/cilium/api/v1/client/daemon github.com/cilium/cilium/api/v1/client/endpoint github.com/cilium/cilium/api/v1/client/ipam @@ -52,6 +53,7 @@ github.com/cilium/cilium/pkg/comparator github.com/cilium/cilium/pkg/components github.com/cilium/cilium/pkg/contexthelpers github.com/cilium/cilium/pkg/controller +github.com/cilium/cilium/pkg/counter github.com/cilium/cilium/pkg/debug github.com/cilium/cilium/pkg/defaults github.com/cilium/cilium/pkg/endpoint/id