/* ****************************************************************************** * INTERPEAK SOURCE FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipmipha_cli.c,v $ $Revision: 1.2 $ * $Source: /home/interpeak/CVSRoot/ipmipha/src/ipmipha_cli.c,v $ * $Author: jhorteli $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Joel Hortelius ****************************************************************************** */ /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ #include "ipmipha_config.h" /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #define IPCOM_USE_CLIB_PROTO #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ipmipha.h" #include "ipmipha_attr.h" #include "ipmipha_cli.h" /* **************************************************************************** * 4 DEFINES **************************************************************************** */ /* **************************************************************************** * 5 TYPES **************************************************************************** */ /* **************************************************************************** * 6 EXTERN PROTOTYPES **************************************************************************** */ /* **************************************************************************** * 7 LOCAL PROTOTYPES **************************************************************************** */ /* **************************************************************************** * 8 DATA **************************************************************************** */ /* **************************************************************************** * 9 STATIC FUNCTIONS **************************************************************************** */ /* **************************************************************************** * 10 GLOBAL FUNCTIONS **************************************************************************** */ /* **************************************************************************** * 11 PUBLIC FUNCTIONS **************************************************************************** */ IP_PUBLIC Ip_bool ipmipha_cli_connect(Ipmip_cli_daemon_t *daemon_info) { ipmip_cli_daemon_init(daemon_info, "ipmipha", IPCOM_IPD_ID_IPMIPHA); return ipmip_cli_daemon_connect(daemon_info); } IP_PUBLIC void ipmipha_cli_daemon_mute(Ipmip_cli_daemon_t *daemon) { Ipmip_cli_daemon_req_t req; ipmip_cli_daemon_request_init(&req); ipmip_cli_daemon_request_start(&req, IPMIPHA_CLI_DAEMON_MUTE); ipmip_cli_daemon_request(daemon, &req); ipmip_cli_daemon_request_release(&req); } IP_PUBLIC void ipmipha_cli_daemon_start(Ipmip_cli_daemon_t *daemon) { Ipmip_cli_daemon_req_t req; ipmip_cli_daemon_request_init(&req); ipmip_cli_daemon_request_start(&req, IPMIPHA_CLI_DAEMON_START); ipmip_cli_daemon_request(daemon, &req); ipmip_cli_daemon_request_release(&req); } IP_PUBLIC void ipmipha_cli_daemon_stop(Ipmip_cli_daemon_t *daemon) { Ipmip_cli_daemon_req_t req; ipmip_cli_daemon_request_init(&req); ipmip_cli_daemon_request_start(&req, IPMIPHA_CLI_DAEMON_STOP); ipmip_cli_daemon_request(daemon, &req); ipmip_cli_daemon_request_release(&req); } IP_PUBLIC struct Ipmipha_mib_haRegNodeCounters * ipmipha_cli_daemon_registration_counters(Ipmip_cli_daemon_t *daemon, Ipmip_cli_daemon_req_t *req) { ipmip_cli_daemon_request_start(req, IPMIPHA_CLI_DAEMON_REGISTRATION_COUNTERS); if (ipmip_cli_daemon_request(daemon, req) == IPCOM_SUCCESS) return (struct Ipmipha_mib_haRegNodeCounters *)ipmip_cli_daemon_find_request_data(req, IPMIPHA_CLI_ATTR_DAEMON_REGCOUNTER); return IP_NULL; } IP_PUBLIC int ipmipha_cli_node_list(Ipmip_cli_daemon_t *daemon, Ipmip_cli_daemon_req_t *req, const char *nai, const char *ifname, Ip_u32 hoa) { ipmip_cli_daemon_request_start(req, IPMIPHA_CLI_BC_X_NODE_LIST); ipmipha_cli_request_set_ifname(req, ifname); ipmipha_cli_request_set_nai(req, nai); ipmipha_cli_request_set_home_address(req, hoa); return ipmip_cli_daemon_request(daemon, req); } IP_PUBLIC Ip_u32 ipmipha_cli_handle_next(Ipmip_attr_iter_t *iter) { /**/ return ipmip_attr_get_u32(ipmip_attr_iter_next(iter, IPMIPHA_CLI_ATTR_BC_X_HANDLE)); } IP_PUBLIC struct Ipmip_attr * ipmipha_cli_node_get(Ipmip_cli_daemon_t *daemon, Ipmip_cli_daemon_req_t *req, Ip_u32 handle) { ipmip_cli_daemon_request_start(req, IPMIPHA_CLI_BC_X_NODE_GET); ipmipha_cli_request_set_handle(req, handle); if (ipmip_cli_daemon_request(daemon, req) == IPCOM_SUCCESS) return ipmip_cli_daemon_find_request(req, IPMIPHA_CLI_ATTR_BC_X); return IP_NULL; } IP_PUBLIC void ipmipha_cli_node_delete(Ipmip_cli_daemon_t *daemon, Ip_u32 handle) { Ipmip_cli_daemon_req_t req; ipmip_cli_daemon_request_init(&req); ipmip_cli_daemon_request_start(&req, IPMIPHA_CLI_BC_X_NODE_DELETE); ipmipha_cli_request_set_handle(&req, handle); ipmip_cli_daemon_request(daemon, &req); ipmip_cli_daemon_request_release(&req); } IP_PUBLIC void ipmipha_cli_node_revoke(Ipmip_cli_daemon_t *daemon, Ip_u32 handle) { Ipmip_cli_daemon_req_t req; ipmip_cli_daemon_request_init(&req); ipmip_cli_daemon_request_start(&req, IPMIPHA_CLI_BC_X_NODE_REVOKE); ipmipha_cli_request_set_handle(&req, handle); ipmip_cli_daemon_request(daemon, &req); ipmip_cli_daemon_request_release(&req); } IP_PUBLIC void ipmipha_cli_request_set_nai(Ipmip_cli_daemon_req_t *req, const char *nai) { if (nai) ipmip_attr_put_str(&req->reqbuf, IPMIPHA_CLI_ATTR_BC_X_NAI, nai); } IP_PUBLIC void ipmipha_cli_request_set_handle(Ipmip_cli_daemon_req_t *req, Ip_u32 handle) { ipmip_attr_put_u32(&req->reqbuf, IPMIPHA_CLI_ATTR_BC_X_HANDLE, handle); } IP_PUBLIC void ipmipha_cli_request_set_home_address(Ipmip_cli_daemon_req_t *req, Ip_u32 hoa) { if (hoa) ipmip_attr_put_inet(&req->reqbuf, IPMIPHA_CLI_ATTR_BC_X_HOA, hoa); } IP_PUBLIC void ipmipha_cli_request_set_ifname(Ipmip_cli_daemon_req_t *req, const char *ifname) { if (ifname) ipmip_attr_put_str(&req->reqbuf,IPMIPHA_CLI_ATTR_BC_X_IFNAME, ifname); } IP_PUBLIC const char * ipmipha_cli_node_get_ifname(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_str(node, IPMIPHA_CLI_ATTR_BC_X_IFNAME); } IP_PUBLIC const char * ipmipha_cli_node_get_nai(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_str(node, IPMIPHA_CLI_ATTR_BC_X_NAI); } IP_PUBLIC const char * ipmipha_cli_node_get_nai_aaah(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_str(node, IPMIPHA_CLI_ATTR_BC_X_NAI_AAAH); } IP_PUBLIC Ip_u32 ipmipha_cli_node_get_handle(struct Ipmip_attr *node) { return ipmip_attr_payload_find_u32(node, IPMIPHA_CLI_ATTR_BC_X_HANDLE); } IP_PUBLIC Ip_u32 ipmipha_cli_node_get_home_address(struct Ipmip_attr *node) { return ipmip_attr_payload_find_inet(node, IPMIPHA_CLI_ATTR_BC_X_HOA); } IP_PUBLIC struct Ipmipha_mib_haCounterEntry * ipmipha_cli_node_get_haCounterEntry(struct Ipmip_attr *node) { return (struct Ipmipha_mib_haCounterEntry *)ipmip_attr_payload_find_data(node, IPMIPHA_CLI_ATTR_BC_X_mib_haCounterEntry); } IP_PUBLIC Ip_time_t ipmipha_cli_node_get_created(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_time_t(node, IPMIPHA_CLI_ATTR_BC_X_CREATION_TIME); } IP_PUBLIC Ip_time_t ipmipha_cli_node_get_last_updated(struct Ipmip_attr *node) { return ipmip_attr_payload_find_time_t(node, IPMIPHA_CLI_ATTR_BC_X_LAST_UPDATED); } IP_PUBLIC Ip_time_t ipmipha_cli_node_get_AAA_last_verified(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_time_t(node, IPMIPHA_CLI_ATTR_BC_X_AAA_VERIFICATION_TIME); } IP_PUBLIC Ip_bool ipmipha_cli_node_get_AAA_accounting_enabled(struct Ipmip_attr *node) { /**/ return ipmip_attr_payload_find_u32(node, IPMIPHA_CLI_ATTR_BC_X_AAA_ACCOUNTING_ENABLED) != 0; } IP_PUBLIC Ip_u64 ipmipha_cli_node_get_stats_rcv_octets64(struct Ipmip_attr *node) { return ipmip_attr_payload_find_u64(node, IPMIPHA_CLI_ATTR_BC_X_STATS_RCV_OCTETS64); } IP_PUBLIC Ip_u64 ipmipha_cli_node_get_stats_rcv_pkts64(struct Ipmip_attr *node) { return ipmip_attr_payload_find_u64(node, IPMIPHA_CLI_ATTR_BC_X_STATS_RCV_PKTS64); } IP_PUBLIC Ip_u64 ipmipha_cli_node_get_stats_snd_octets64(struct Ipmip_attr *node) { return ipmip_attr_payload_find_u64(node, IPMIPHA_CLI_ATTR_BC_X_STATS_SND_OCTETS64); } IP_PUBLIC Ip_u64 ipmipha_cli_node_get_stats_snd_pkts64(struct Ipmip_attr *node) { return ipmip_attr_payload_find_u64(node, IPMIPHA_CLI_ATTR_BC_X_STATS_SND_PKTS64); } IP_PUBLIC struct Ipmip_attr * ipmipha_cli_binding_next(Ipmip_attr_iter_t *iter) { /**/ return ipmip_attr_iter_next(iter, IPMIPHA_CLI_ATTR_BC_X_COA); } IP_PUBLIC Ip_time_t ipmipha_cli_binding_get_created(struct Ipmip_attr *binding) { /**/ return ipmip_attr_payload_find_time_t(binding, IPMIPHA_CLI_ATTR_BC_X_COA_CREATION_TIME); } IP_PUBLIC Ip_time_t ipmipha_cli_binding_get_last_updated(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_time_t(binding, IPMIPHA_CLI_ATTR_BC_X_COA_LAST_UPDATED); } IP_PUBLIC Ip_u64 ipmipha_cli_binding_get_stats_rcv_octets64(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u64(binding, IPMIPHA_CLI_ATTR_BC_X_COA_STATS_RCV_OCTETS64); } IP_PUBLIC Ip_u64 ipmipha_cli_binding_get_stats_rcv_pkts64(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u64(binding, IPMIPHA_CLI_ATTR_BC_X_COA_STATS_RCV_PKTS64); } IP_PUBLIC Ip_u64 ipmipha_cli_binding_get_stats_snd_octets64(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u64(binding, IPMIPHA_CLI_ATTR_BC_X_COA_STATS_SND_OCTETS64); } IP_PUBLIC Ip_u64 ipmipha_cli_binding_get_stats_snd_pkts64(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u64(binding, IPMIPHA_CLI_ATTR_BC_X_COA_STATS_SND_PKTS64); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_address(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_inet(binding, IPMIPHA_CLI_ATTR_BC_X_COA_INET); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_tunnel_endpoint(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_inet(binding, IPMIPHA_CLI_ATTR_BC_X_COA_TUNNELING_ENDPOINT); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_tunnel_type(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_TUNNELING_TYPE); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_tunnel_flags(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_TUNNELING_FLAGS); } IP_PUBLIC Ip_u16 ipmipha_cli_binding_get_tunnel_port(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_TUNNELING_PORT); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_spi_mobile_foreign(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_SPI_MF); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_spi_foreign_home(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_SPI_FH); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_spi_mobile_AAA(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_SPI_AAA); } IP_PUBLIC struct Ipmipha_mib_haMobilityBindingEntry * ipmipha_cli_binding_get_haMobilityBindingEntry(struct Ipmip_attr *binding) { return (struct Ipmipha_mib_haMobilityBindingEntry *)ipmip_attr_payload_find_data(binding, IPMIPHA_CLI_ATTR_BC_X_COA_mib_haMobilityBindingEntry); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_time_granted(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPFA_CLI_ATTR_BC_X_COA_TIME_GRANTED); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_time_remaining(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPFA_CLI_ATTR_BC_X_COA_TIME_REMAINING); } IP_PUBLIC Ip_u32 ipmipha_cli_binding_get_registration_flags(struct Ipmip_attr *binding) { return ipmip_attr_payload_find_u32(binding, IPMIPHA_CLI_ATTR_BC_X_COA_REG_FLAGS); } /* **************************************************************************** * END OF FILE **************************************************************************** */