@@ -8,6 +8,7 @@ use rdb::{ImportExportPolicy, PolicyAction, Prefix4, Prefix6};
88use schemars:: JsonSchema ;
99use serde:: { Deserialize , Serialize } ;
1010use std:: collections:: HashMap ;
11+ use std:: net:: SocketAddrV6 ;
1112use std:: time:: Duration ;
1213use std:: {
1314 collections:: BTreeMap ,
@@ -40,38 +41,33 @@ pub enum NeighborResetOp {
4041pub struct Neighbor {
4142 pub asn : u32 ,
4243 pub name : String ,
44+ pub group : String ,
4345 pub host : SocketAddr ,
44- pub hold_time : u64 ,
45- pub idle_hold_time : u64 ,
46- pub delay_open : u64 ,
47- pub connect_retry : u64 ,
48- pub keepalive : u64 ,
49- pub resolution : u64 ,
46+ #[ serde( flatten) ]
47+ pub parameters : BgpPeerParameters ,
48+ }
49+
50+ #[ derive( Debug , Deserialize , Serialize , JsonSchema , Clone , PartialEq ) ]
51+ pub struct UnnumberedNeighbor {
52+ pub asn : u32 ,
53+ pub name : String ,
5054 pub group : String ,
51- pub passive : bool ,
52- pub remote_asn : Option < u32 > ,
53- pub min_ttl : Option < u8 > ,
54- pub md5_auth_key : Option < String > ,
55- pub multi_exit_discriminator : Option < u32 > ,
56- pub communities : Vec < u32 > ,
57- pub local_pref : Option < u32 > ,
58- pub enforce_first_as : bool ,
59- pub allow_import : ImportExportPolicy ,
60- pub allow_export : ImportExportPolicy ,
61- pub vlan_id : Option < u16 > ,
55+ pub interface : String ,
56+ #[ serde( flatten) ]
57+ pub parameters : BgpPeerParameters ,
6258}
6359
6460impl From < Neighbor > for PeerConfig {
6561 fn from ( rq : Neighbor ) -> Self {
6662 Self {
6763 name : rq. name . clone ( ) ,
6864 host : rq. host ,
69- hold_time : rq. hold_time ,
70- idle_hold_time : rq. idle_hold_time ,
71- delay_open : rq. delay_open ,
72- connect_retry : rq. connect_retry ,
73- keepalive : rq. keepalive ,
74- resolution : rq. resolution ,
65+ hold_time : rq. parameters . hold_time ,
66+ idle_hold_time : rq. parameters . idle_hold_time ,
67+ delay_open : rq. parameters . delay_open ,
68+ connect_retry : rq. parameters . connect_retry ,
69+ keepalive : rq. parameters . keepalive ,
70+ resolution : rq. parameters . resolution ,
7571 }
7672 }
7773}
@@ -84,52 +80,102 @@ impl Neighbor {
8480 ) -> Self {
8581 Self {
8682 asn,
87- remote_asn : rq. remote_asn ,
88- min_ttl : rq. min_ttl ,
89- name : rq. name . clone ( ) ,
90- host : rq. host ,
91- hold_time : rq. hold_time ,
92- idle_hold_time : rq. idle_hold_time ,
93- delay_open : rq. delay_open ,
94- connect_retry : rq. connect_retry ,
95- keepalive : rq. keepalive ,
96- resolution : rq. resolution ,
97- passive : rq. passive ,
9883 group : group. clone ( ) ,
99- md5_auth_key : rq. md5_auth_key ,
100- multi_exit_discriminator : rq. multi_exit_discriminator ,
101- communities : rq. communities ,
102- local_pref : rq. local_pref ,
103- enforce_first_as : rq. enforce_first_as ,
104- allow_import : rq. allow_import ,
105- allow_export : rq. allow_export ,
106- vlan_id : rq. vlan_id ,
84+ host : rq. host ,
85+ name : rq. name . clone ( ) ,
86+ parameters : rq. parameters . clone ( ) ,
10787 }
10888 }
10989
11090 pub fn from_rdb_neighbor_info ( asn : u32 , rq : & rdb:: BgpNeighborInfo ) -> Self {
11191 Self {
11292 asn,
113- remote_asn : rq. remote_asn ,
114- min_ttl : rq. min_ttl ,
93+ group : rq. group . clone ( ) ,
11594 name : rq. name . clone ( ) ,
11695 host : rq. host ,
117- hold_time : rq. hold_time ,
118- idle_hold_time : rq. idle_hold_time ,
119- delay_open : rq. delay_open ,
120- connect_retry : rq. connect_retry ,
121- keepalive : rq. keepalive ,
122- resolution : rq. resolution ,
123- passive : rq. passive ,
96+ parameters : BgpPeerParameters {
97+ remote_asn : rq. parameters . remote_asn ,
98+ min_ttl : rq. parameters . min_ttl ,
99+ hold_time : rq. parameters . hold_time ,
100+ idle_hold_time : rq. parameters . idle_hold_time ,
101+ delay_open : rq. parameters . delay_open ,
102+ connect_retry : rq. parameters . connect_retry ,
103+ keepalive : rq. parameters . keepalive ,
104+ resolution : rq. parameters . resolution ,
105+ passive : rq. parameters . passive ,
106+ md5_auth_key : rq. parameters . md5_auth_key . clone ( ) ,
107+ multi_exit_discriminator : rq
108+ . parameters
109+ . multi_exit_discriminator ,
110+ communities : rq. parameters . communities . clone ( ) ,
111+ local_pref : rq. parameters . local_pref ,
112+ enforce_first_as : rq. parameters . enforce_first_as ,
113+ allow_import : rq. parameters . allow_import . clone ( ) ,
114+ allow_export : rq. parameters . allow_export . clone ( ) ,
115+ vlan_id : rq. parameters . vlan_id ,
116+ } ,
117+ }
118+ }
119+ }
120+
121+ impl UnnumberedNeighbor {
122+ pub fn from_bgp_peer_config (
123+ asn : u32 ,
124+ group : String ,
125+ rq : UnnumberedBgpPeerConfig ,
126+ ) -> Self {
127+ Self {
128+ asn,
129+ group : group. clone ( ) ,
130+ interface : rq. interface . clone ( ) ,
131+ name : rq. name . clone ( ) ,
132+ parameters : rq. parameters . clone ( ) ,
133+ }
134+ }
135+
136+ pub fn to_peer_config ( & self , addr : SocketAddrV6 ) -> PeerConfig {
137+ PeerConfig {
138+ name : self . name . clone ( ) ,
139+ host : addr. into ( ) ,
140+ hold_time : self . parameters . hold_time ,
141+ idle_hold_time : self . parameters . idle_hold_time ,
142+ delay_open : self . parameters . delay_open ,
143+ connect_retry : self . parameters . connect_retry ,
144+ keepalive : self . parameters . keepalive ,
145+ resolution : self . parameters . resolution ,
146+ }
147+ }
148+
149+ pub fn from_rdb_neighbor_info (
150+ asn : u32 ,
151+ rq : & rdb:: BgpUnnumberedNeighborInfo ,
152+ ) -> Self {
153+ Self {
154+ asn,
124155 group : rq. group . clone ( ) ,
125- md5_auth_key : rq. md5_auth_key . clone ( ) ,
126- multi_exit_discriminator : rq. multi_exit_discriminator ,
127- communities : rq. communities . clone ( ) ,
128- local_pref : rq. local_pref ,
129- enforce_first_as : rq. enforce_first_as ,
130- allow_import : rq. allow_import . clone ( ) ,
131- allow_export : rq. allow_export . clone ( ) ,
132- vlan_id : rq. vlan_id ,
156+ name : rq. name . clone ( ) ,
157+ interface : rq. interface . clone ( ) ,
158+ parameters : BgpPeerParameters {
159+ remote_asn : rq. parameters . remote_asn ,
160+ min_ttl : rq. parameters . min_ttl ,
161+ hold_time : rq. parameters . hold_time ,
162+ idle_hold_time : rq. parameters . idle_hold_time ,
163+ delay_open : rq. parameters . delay_open ,
164+ connect_retry : rq. parameters . connect_retry ,
165+ keepalive : rq. parameters . keepalive ,
166+ resolution : rq. parameters . resolution ,
167+ passive : rq. parameters . passive ,
168+ md5_auth_key : rq. parameters . md5_auth_key . clone ( ) ,
169+ multi_exit_discriminator : rq
170+ . parameters
171+ . multi_exit_discriminator ,
172+ communities : rq. parameters . communities . clone ( ) ,
173+ local_pref : rq. parameters . local_pref ,
174+ enforce_first_as : rq. parameters . enforce_first_as ,
175+ allow_import : rq. parameters . allow_import . clone ( ) ,
176+ allow_export : rq. parameters . allow_export . clone ( ) ,
177+ vlan_id : rq. parameters . vlan_id ,
178+ } ,
133179 }
134180 }
135181}
@@ -268,10 +314,24 @@ pub struct ApplyRequest {
268314 pub peers : HashMap < String , Vec < BgpPeerConfig > > ,
269315}
270316
271- #[ derive( Debug , Deserialize , Serialize , JsonSchema , Clone ) ]
317+ #[ derive( Debug , Deserialize , Serialize , JsonSchema , Clone , PartialEq ) ]
272318pub struct BgpPeerConfig {
273319 pub host : SocketAddr ,
274320 pub name : String ,
321+ #[ serde( flatten) ]
322+ pub parameters : BgpPeerParameters ,
323+ }
324+
325+ #[ derive( Debug , Deserialize , Serialize , JsonSchema , Clone , PartialEq ) ]
326+ pub struct UnnumberedBgpPeerConfig {
327+ pub interface : String ,
328+ pub name : String ,
329+ #[ serde( flatten) ]
330+ pub parameters : BgpPeerParameters ,
331+ }
332+
333+ #[ derive( Debug , Deserialize , Serialize , JsonSchema , Clone , PartialEq ) ]
334+ pub struct BgpPeerParameters {
275335 pub hold_time : u64 ,
276336 pub idle_hold_time : u64 ,
277337 pub delay_open : u64 ,
0 commit comments