2828#include "pfcp_router.h"
2929#include "inet_server.h"
3030#include "pfcp_assoc.h"
31+ #include "pfcp_proto_hdl.h"
3132#include "pfcp.h"
3233#include "inet_utils.h"
3334#include "command.h"
@@ -162,6 +163,33 @@ DEFUN(pfcp_router_bpf_prog,
162163 return CMD_SUCCESS ;
163164}
164165
166+ DEFUN (pfcp_router_peer_list ,
167+ pfcp_router_peer_list_cmd ,
168+ "pfcp-peer-list STRING" ,
169+ "Use Specific PFCP Peer list\n"
170+ "PFCP Peer list name" )
171+ {
172+ struct pfcp_router * c = vty -> index ;
173+ struct pfcp_peer_list * plist ;
174+
175+ if (argc < 1 ) {
176+ vty_out (vty , "%% missing arguments%s" , VTY_NEWLINE );
177+ return CMD_WARNING ;
178+ }
179+
180+ plist = pfcp_peer_list_get (argv [0 ]);
181+ if (!plist ) {
182+ vty_out (vty , "%% unknown pfcp-peer-list:'%s'%s"
183+ , argv [0 ], VTY_NEWLINE );
184+ return CMD_WARNING ;
185+ }
186+
187+ c -> peer_list = plist ;
188+ thread_add_event (master , pfcp_assoc_setup_request_send , c , 0 );
189+
190+ return CMD_SUCCESS ;
191+ }
192+
165193DEFUN (pfcp_listen ,
166194 pfcp_listen_cmd ,
167195 "listen (A.B.C.D|X:X::X:X) port <1024-65535>" ,
@@ -479,7 +507,7 @@ DEFUN(pfcp_peer_list,
479507 return CMD_WARNING ;
480508 }
481509
482- vty -> node = PFCP_ROUTER_NODE ;
510+ vty -> node = PFCP_PEER_LIST_NODE ;
483511 vty -> index = new ;
484512 return CMD_SUCCESS ;
485513}
@@ -524,9 +552,10 @@ DEFUN(pfcp_peer_list_desciption,
524552
525553DEFUN (pfcp_peer ,
526554 pfcp_peer_cmd ,
527- "peer STRING " ,
555+ "peer (A.B.C.D|X:X::X:X) " ,
528556 "Create a PFCP Peer\n"
529- "PFCP Peer" )
557+ "PFCP IPv4 Peer\n"
558+ "PFCP IPv6 Peer\n" )
530559{
531560 struct pfcp_peer_list * p = vty -> index ;
532561 int err ;
@@ -542,6 +571,12 @@ DEFUN(pfcp_peer,
542571 return CMD_WARNING ;
543572 }
544573
574+ if (p -> nr_addr >= PFCP_PEER_MAX ) {
575+ vty_out (vty , "%% Maximum peer per list reached:%d%s"
576+ , p -> nr_addr , VTY_NEWLINE );
577+ return CMD_WARNING ;
578+ }
579+
545580 switch (p -> addr [p -> nr_addr ].family ) {
546581 case AF_INET :
547582 if (!p -> addr [p -> nr_addr ].sin .sin_port )
@@ -609,6 +644,9 @@ config_pfcp_router_write(struct vty *vty)
609644 if (c -> bpf_prog )
610645 vty_out (vty , " bpf-program %s%s"
611646 , c -> bpf_prog -> name , VTY_NEWLINE );
647+ if (c -> peer_list )
648+ vty_out (vty , " pfcp-peer-list %s%s"
649+ , c -> peer_list -> name , VTY_NEWLINE );
612650 srv = & c -> s ;
613651 if (srv -> s .addr .ss_family )
614652 vty_out (vty , " listen %s port %d%s"
@@ -664,6 +702,7 @@ config_pfcp_peer_list_write(struct vty *vty)
664702 , VTY_NEWLINE );
665703 }
666704
705+ vty_out (vty , "!\n" );
667706 }
668707
669708 return 0 ;
@@ -684,6 +723,7 @@ cmd_ext_pfcp_router_install(void)
684723 install_element (PFCP_ROUTER_NODE , & pfcp_router_description_cmd );
685724 install_element (PFCP_ROUTER_NODE , & pfcp_node_id_cmd );
686725 install_element (PFCP_ROUTER_NODE , & pfcp_router_bpf_prog_cmd );
726+ install_element (PFCP_ROUTER_NODE , & pfcp_router_peer_list_cmd );
687727 install_element (PFCP_ROUTER_NODE , & pfcp_listen_cmd );
688728 install_element (PFCP_ROUTER_NODE , & pfcp_debug_cmd );
689729 install_element (PFCP_ROUTER_NODE , & pfcp_debug_teid_cmd );
@@ -703,7 +743,7 @@ cmd_ext_pfcp_router_install(void)
703743}
704744
705745static int
706- cmd_ext_pfcp_peer_install (void )
746+ cmd_ext_pfcp_peer_list_install (void )
707747{
708748 /* Install PFCP Router commands. */
709749 install_element (CONFIG_NODE , & pfcp_peer_list_cmd );
@@ -738,7 +778,7 @@ struct cmd_node pfcp_peer_list_node = {
738778
739779static struct cmd_ext cmd_ext_pfcp_peer_list = {
740780 .node = & pfcp_peer_list_node ,
741- .install = cmd_ext_pfcp_peer_install ,
781+ .install = cmd_ext_pfcp_peer_list_install ,
742782};
743783
744784static void __attribute__((constructor ))
0 commit comments