libosmo-sigtran 2.1.0.165-6ea6 Osmocom SIGTRAN library

Macros | Functions | Variables
ss7_asp_vty.c File Reference
`#include <stdlib.h>`
`#include <unistd.h>`
`#include <errno.h>`
`#include <stdint.h>`
`#include <string.h>`
`#include <netdb.h>`
`#include <arpa/inet.h>`
`#include <sys/ioctl.h>`
`#include <osmocom/core/sockaddr_str.h>`
`#include <osmocom/vty/vty.h>`
`#include <osmocom/vty/command.h>`
`#include <osmocom/vty/logging.h>`
`#include <osmocom/vty/telnet_interface.h>`
`#include <osmocom/vty/misc.h>`
`#include <osmocom/netif/stream.h>`
`#include <osmocom/sigtran/osmo_ss7.h>`
`#include "xua_internal.h"`
`#include "ss7_as.h"`
`#include "ss7_asp.h"`
`#include "ss7_combined_linkset.h"`
`#include <ss7_linkset.h>`
`#include "ss7_internal.h"`
`#include "ss7_vty.h"`
`#include <netinet/tcp.h>`

## Macros
#define | ASP_SCTP_PARAM_INIT_DESC
#define | ASP_SCTP_PARAM_INIT_FIELDS "(num-ostreams|max-instreams|max-attempts|timeout)"
#define | ASP_TCP_PARAM_DESC "Configure TCP parameters\n"
#define | ASP_TCP_PARAM_KEEPALIVE_DESC
#define | ASP_TCP_PARAM_KEEPALIVE_CFG_DESC
#define | ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS "(time|intvl|probes)"
#define | ASP_TCP_PARAM_USER_TIMEOUT_DESC

## Functions
static void | tx_daud_pc (struct osmo_ss7_asp *asp, uint32_t pc)
| DEFUN_ATTR (cs7_asp_audit, cs7_asp_audit_cmd, "cs7 instance <0-15> asp NAME audit point-code POINT_CODE", CS7_STR "Instance related commands\n" "SS7 Instance Number\n" "ASP related commands\n" "Name of ASP\n" "Audit destination Point Code (xUA DAUD)\n" "Destination Point Code to audit\n" "Destination Point Code value\n", CMD_ATTR_IMMEDIATE)
| DEFUN_ATTR (cs7_asp, cs7_asp_cmd, "asp NAME <0-65535> <0-65535> " XUA_VAR_STR, "Configure Application Server Process\n" "Name of ASP\n" "Remote port number\n" "Local port number\n" XUA_VAR_HELP_STR, CMD_ATTR_NODE_EXIT)
| ALIAS_ATTR (cs7_asp, cs7_asp_trans_proto_cmd, "asp NAME <0-65535> <0-65535> " XUA_VAR_STR " " IPPROTO_VAR_STR, "Configure Application Server Process\n" "Name of ASP\n" "Remote port number\n" "Local port number\n" XUA_VAR_HELP_STR IPPROTO_VAR_HELP_STR, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (no_cs7_asp, no_cs7_asp_cmd, "no asp NAME", NO_STR "Disable Application Server Process\n" "Name of ASP\n", CMD_ATTR_IMMEDIATE)
| DEFUN_ATTR (asp_local_ip, asp_local_ip_cmd, "local-ip " VTY_IPV46_CMD " [primary]", "Specify Local IP Address from which to contact ASP\n" "Local IPv4 Address from which to contact of ASP\n" "Local IPv6 Address from which to contact of ASP\n" "Signal the SCTP peer to use this address as Primary Address\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_local_ip, asp_no_local_ip_cmd, "no local-ip " VTY_IPV46_CMD, NO_STR "Specify Local IP Address from which to contact ASP\n" "Local IPv4 Address from which to contact of ASP\n" "Local IPv6 Address from which to contact of ASP\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_remote_ip, asp_remote_ip_cmd, "remote-ip " VTY_IPV46_CMD " [primary]", "Specify Remote IP Address of ASP\n" "Remote IPv4 Address of ASP\n" "Remote IPv6 Address of ASP\n" "Set remote address as SCTP Primary Address\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_remote_ip, asp_no_remote_ip_cmd, "no remote-ip " VTY_IPV46_CMD, NO_STR "Specify Remote IP Address of ASP\n" "Remote IPv4 Address of ASP\n" "Remote IPv6 Address of ASP\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_qos_clas, asp_qos_class_cmd, "qos-class " QOS_CLASS_RANGE_STR, "Specify QoS Class of ASP\n" QOS_CLASS_RANGE_HELP_STR, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_role, asp_role_cmd, "role (sg|asp|ipsp)", "Specify the xUA role for this ASP\n" "SG (Signaling Gateway)\n" "ASP (Application Server Process)\n" "IPSP (IP Signalling Point)\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_transport_role, asp_transport_role_cmd, "transport-role (client|server)", "Specify the transport layer role for this ASP\n" "Operate as a client; connect to a server\n" "Operate as a server; wait for client connections\n", CMD_ATTR_NODE_EXIT)
| ALIAS_ATTR (asp_transport_role, asp_sctp_role_cmd, "sctp-role (client|server)", "Specify the SCTP role for this ASP\n" "Operate as SCTP client; connect to a server\n" "Operate as SCTP server; wait for client connections\n", CMD_ATTR_HIDDEN|CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_sctp_param_init, asp_sctp_param_init_cmd, "sctp-param init " ASP_SCTP_PARAM_INIT_FIELDS " <0-65535>", ASP_SCTP_PARAM_INIT_DESC "Value of the parameter\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_sctp_param_init, asp_no_sctp_param_init_cmd, "no sctp-param init " ASP_SCTP_PARAM_INIT_FIELDS, NO_STR ASP_SCTP_PARAM_INIT_DESC, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_tcp_param_keepalive_enabled, asp_tcp_param_keepalive_enabled_cmd, "tcp-param keepalive enabled", ASP_TCP_PARAM_KEEPALIVE_DESC "Enable TCP keep-alive\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_tcp_param_keepalive, asp_no_tcp_param_keepalive_cmd, "no tcp-param keepalive", NO_STR ASP_TCP_PARAM_KEEPALIVE_DESC, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_tcp_param_keepalive_cfg, asp_tcp_param_keepalive_cfg_cmd, "tcp-param keepalive " ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS " <0-65535>", ASP_TCP_PARAM_KEEPALIVE_CFG_DESC "Value of the parameter\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_tcp_param_keepalive_cfg, asp_no_tcp_param_keepalive_cfg_cmd, "no tcp-param keepalive " ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS, NO_STR ASP_TCP_PARAM_KEEPALIVE_CFG_DESC, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_tcp_param_user_timeout, asp_tcp_param_user_timeout_cmd, "tcp-param user-timeout <0-65535>", ASP_TCP_PARAM_USER_TIMEOUT_DESC "Value of the parameter\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_tcp_param_user_timeout, asp_no_tcp_param_user_timeout_cmd, "no tcp-param user-timeout", NO_STR ASP_TCP_PARAM_USER_TIMEOUT_DESC, CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_destination_audit_asp_active, asp_destination_audit_asp_active_cmd, "destination-audit asp-active", "Configure ASP Auditing (xUA DAUD)\n" "Transmit DAUD after ASP successful activate (for remote PCs in sccp address-book)\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_destination_audit_asp_active, asp_no_destination_audit_asp_active_cmd, "no destination-audit asp-active", NO_STR "Configure ASP Auditing (xUA DAUD)\n" "Transmit xUA DAUD after ASP successful activate (for remote PCs in sccp address-book)\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_block, asp_block_cmd, "block", "Allows a SCTP Association with ASP, but doesn't let it become active\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_shutdown, asp_shutdown_cmd, "shutdown", "Terminates SCTP association; New associations will be rejected\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_no_shutdown, asp_no_shutdown_cmd, "no shutdown", NO_STR "Terminates SCTP association; New associations will be rejected\n", CMD_ATTR_NODE_EXIT)
| DEFUN_ATTR (asp_quirk, asp_quirk_cmd, "OVERWRITTEN", "OVERWRITTEN\n", CMD_ATTR_IMMEDIATE)
| DEFUN_ATTR (asp_no_quirk, asp_no_quirk_cmd, "OVERWRITTEN", "OVERWRITTEN\n", CMD_ATTR_IMMEDIATE)
| DEFUN_ATTR (asp_timer_xua, asp_timer_xua_cmd, NULL, NULL, CMD_ATTR_IMMEDIATE)
static void | gen_asp_timer_xua_cmd_strs (struct cmd_element *cmd)
| DEFUN_ATTR (asp_timer_lm, asp_timer_lm_cmd, NULL, NULL, CMD_ATTR_IMMEDIATE)
static void | gen_asp_timer_lm_cmd_strs (struct cmd_element *cmd)
static void | write_asp_timers_xua (struct vty *vty, const char *indent, struct osmo_ss7_asp *asp)
static void | write_asp_timers_lm (struct vty *vty, const char *indent, struct osmo_ss7_asp *asp)
static char * | as_list_for_asp (const struct osmo_ss7_asp *asp, char *buf, size_t buf_len)
static char * | get_sockname_buf (char *buf, size_t buf_len, int fd, int proto, bool local)
static void | show_one_asp (struct vty *vty, struct osmo_ss7_asp *asp)
static int | show_asp (struct vty *vty, int id, const char *asp_name)
| DEFUN (show_cs7_asp, show_cs7_asp_cmd, "show cs7 instance <0-15> asp", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP)\n")
| DEFUN (show_cs7_asp_name, show_cs7_asp_name_cmd, "show cs7 instance <0-15> asp name ASP_NAME", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP)\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n")
static void | show_one_asp_remaddr_tcp (struct vty *vty, struct osmo_ss7_asp *asp)
static void | show_one_asp_remaddr (struct vty *vty, struct osmo_ss7_asp *asp)
static int | show_asp_remaddr (struct vty *vty, int id, const char *asp_name)
| DEFUN (show_cs7_asp_remaddr, show_cs7_asp_remaddr_cmd, "show cs7 instance <0-15> asp-remaddr", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) remote addresses information\n")
| DEFUN (show_cs7_asp_remaddr_name, show_cs7_asp_remaddr_name_cmd, "show cs7 instance <0-15> asp-remaddr name ASP_NAME", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) remote addresses information\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n")
static void | show_one_asp_assoc_status_tcp (struct vty *vty, struct osmo_ss7_asp *asp)
static void | show_one_asp_assoc_status (struct vty *vty, struct osmo_ss7_asp *asp)
static int | show_asp_assoc_status (struct vty *vty, int id, const char *asp_name)
| DEFUN (show_cs7_asp_assoc_status, show_cs7_asp_assoc_status_cmd, "show cs7 instance <0-15> asp-assoc-status", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) SCTP association status\n")
| DEFUN (show_cs7_asp_assoc_status_name, show_cs7_asp_assoc_status_name_cmd, "show cs7 instance <0-15> asp-assoc-status name ASP_NAME", SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) SCTP association information\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n")
void | ss7_vty_write_one_asp (struct vty *vty, struct osmo_ss7_asp *asp, bool show_dyn_config)
int | ss7_vty_node_asp_go_parent (struct vty *vty)
void | ss7_vty_init_node_asp (void)

## Variables
static struct cmd_node | asp_node
static const struct value_string | tcp_info_state_values []
static const struct value_string | asp_quirk_names []
static const struct value_string | asp_quirk_descs []

## Macro Definition Documentation

## ◆ ASP_SCTP_PARAM_INIT_DESC

#define ASP_SCTP_PARAM_INIT_DESC

Value:
"Configure SCTP parameters\n" \
"Configure INIT related parameters\n" \
"Configure INIT Number of Outbound Streams\n" \
"Configure INIT Maximum Inboud Streams\n" \
"Configure INIT Maximum Attempts\n" \
"Configure INIT Timeout (milliseconds)\n"

## ◆ ASP_SCTP_PARAM_INIT_FIELDS

#define ASP_SCTP_PARAM_INIT_FIELDS "(num-ostreams|max-instreams|max-attempts|timeout)"

## ◆ ASP_TCP_PARAM_DESC

#define ASP_TCP_PARAM_DESC "Configure TCP parameters\n"

## ◆ ASP_TCP_PARAM_KEEPALIVE_CFG_DESC

#define ASP_TCP_PARAM_KEEPALIVE_CFG_DESC

Value:
ASP_TCP_PARAM_KEEPALIVE_DESC \
"Configure number of seconds a connection needs to be idle before beggining to send probes\n" \
"Configure number of seconds between probes\n" \
"Configure max number of probes to send before giving up if no response is obtained\n"
ASP_TCP_PARAM_KEEPALIVE_DESC
#define ASP_TCP_PARAM_KEEPALIVE_DESC
Definition: ss7_asp_vty.c:505

## ◆ ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS

#define ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS "(time|intvl|probes)"

## ◆ ASP_TCP_PARAM_KEEPALIVE_DESC

#define ASP_TCP_PARAM_KEEPALIVE_DESC

Value:
ASP_TCP_PARAM_DESC \
"Configure TCP keep-alive related parameters\n"
ASP_TCP_PARAM_DESC
#define ASP_TCP_PARAM_DESC
Definition: ss7_asp_vty.c:504

## ◆ ASP_TCP_PARAM_USER_TIMEOUT_DESC

#define ASP_TCP_PARAM_USER_TIMEOUT_DESC

Value:
ASP_TCP_PARAM_DESC \
"Configure TCP User Timeout socket option (TCP_USER_TIMEOUT)\n"

## Function Documentation

## ◆ ALIAS_ATTR() [1/2]

ALIAS_ATTR | ( | asp_transport_role | ,
|  | asp_sctp_role_cmd | ,
|  | "sctp-role (client|server)" | ,
|  | "Specify the SCTP role for this ASP\n" "Operate as SCTP client; connect to a server\n" "Operate as SCTP server; wait for client connections\n" | ,
|  | CMD_ATTR_HIDDEN| | CMD_ATTR_NODE_EXIT
| ) |  |

## ◆ ALIAS_ATTR() [2/2]

ALIAS_ATTR | ( | cs7_asp | ,
|  | cs7_asp_trans_proto_cmd | ,
|  | "asp NAME <0-65535> <0-65535> " XUA_VAR_STR " " | IPPROTO_VAR_STR,
|  | "Configure Application Server Process\n" "Name of ASP\n" "Remote port number\n" "Local port number\n" XUA_VAR_HELP_STR | IPPROTO_VAR_HELP_STR,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

## ◆ as_list_for_asp()

static char * as_list_for_asp | ( | const struct osmo_ss7_asp * | asp,
|  | char * | buf,
|  | size_t | buf_len
| ) |  |
| static

References osmo_ss7_instance::as_list, osmo_ss7_as::cfg, osmo_ss7_asp::inst, osmo_ss7_as::list, osmo_ss7_as::name, and osmo_ss7_as_has_asp().

Referenced by show_one_asp().

## ◆ DEFUN() [1/6]

DEFUN | ( | show_cs7_asp | ,
|  | show_cs7_asp_cmd | ,
|  | "show cs7 instance <0-15> asp" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP)\n" |
| ) |  |

References NULL, and show_asp().

## ◆ DEFUN() [2/6]

DEFUN | ( | show_cs7_asp_assoc_status | ,
|  | show_cs7_asp_assoc_status_cmd | ,
|  | "show cs7 instance <0-15> asp-assoc-status" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) SCTP association status\n" |
| ) |  |

References NULL, and show_asp_assoc_status().

## ◆ DEFUN() [3/6]

DEFUN | ( | show_cs7_asp_assoc_status_name | ,
|  | show_cs7_asp_assoc_status_name_cmd | ,
|  | "show cs7 instance <0-15> asp-assoc-status name ASP_NAME" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) SCTP association information\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n" |
| ) |  |

References show_asp_assoc_status().

## ◆ DEFUN() [4/6]

DEFUN | ( | show_cs7_asp_name | ,
|  | show_cs7_asp_name_cmd | ,
|  | "show cs7 instance <0-15> asp name ASP_NAME" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP)\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n" |
| ) |  |

References show_asp().

## ◆ DEFUN() [5/6]

DEFUN | ( | show_cs7_asp_remaddr | ,
|  | show_cs7_asp_remaddr_cmd | ,
|  | "show cs7 instance <0-15> asp-remaddr" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) remote addresses information\n" |
| ) |  |

References NULL, and show_asp_remaddr().

## ◆ DEFUN() [6/6]

DEFUN | ( | show_cs7_asp_remaddr_name | ,
|  | show_cs7_asp_remaddr_name_cmd | ,
|  | "show cs7 instance <0-15> asp-remaddr name ASP_NAME" | ,
|  | SHOW_STR CS7_STR INST_STR INST_STR "Application Server Process (ASP) remote addresses information\n" "Lookup ASP with a given name\n" "Name of the Application Server Process (ASP)\n" |
| ) |  |

References show_asp_remaddr().

## ◆ DEFUN_ATTR() [1/27]

DEFUN_ATTR | ( | asp_block | ,
|  | asp_block_cmd | ,
|  | "block" | ,
|  | "Allows a SCTP Association with | ASP,
|  | but doesn 't let it become active\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

## ◆ DEFUN_ATTR() [2/27]

DEFUN_ATTR | ( | asp_destination_audit_asp_active | ,
|  | asp_destination_audit_asp_active_cmd | ,
|  | "destination-audit asp-active" | ,
|  | "Configure ASP Auditing (xUA DAUD)\n" "Transmit DAUD after ASP successful activate (for remote PCs in sccp address-book)\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::daud_act, OSMO_SS7_ASP_ROLE_ASP, and osmo_ss7_asp::role.

## ◆ DEFUN_ATTR() [3/27]

DEFUN_ATTR | ( | asp_local_ip | ,
|  | asp_local_ip_cmd | ,
|  | "local-ip " VTY_IPV46_CMD " " | [primary],
|  | "Specify Local IP Address from which to contact ASP\n" "Local IPv4 Address from which to contact of ASP\n" "Local IPv6 Address from which to contact of ASP\n" "Signal the SCTP peer to use this address as Primary Address\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp_peer::host, osmo_ss7_asp_peer::host_cnt, osmo_ss7_asp_peer::idx_primary, osmo_ss7_asp::local, OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp::proto, ss7_asp_apply_new_local_address(), ss7_asp_apply_peer_primary_address(), ss7_asp_is_started(), and ss7_asp_peer_add_host2().

## ◆ DEFUN_ATTR() [4/27]

DEFUN_ATTR | ( | asp_no_destination_audit_asp_active | ,
|  | asp_no_destination_audit_asp_active_cmd | ,
|  | "no destination-audit asp-active" | ,
|  | NO_STR "Configure ASP Auditing (xUA DAUD)\n" "Transmit xUA DAUD after ASP successful activate (for remote PCs in sccp address-book)\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, and osmo_ss7_asp::daud_act.

## ◆ DEFUN_ATTR() [5/27]

DEFUN_ATTR | ( | asp_no_local_ip | ,
|  | asp_no_local_ip_cmd | ,
|  | "no local-ip " | VTY_IPV46_CMD,
|  | NO_STR "Specify Local IP Address from which to contact ASP\n" "Local IPv4 Address from which to contact of ASP\n" "Local IPv6 Address from which to contact of ASP\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::local, OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp::proto, ss7_asp_apply_drop_local_address(), ss7_asp_is_started(), ss7_asp_peer_del_host(), and ss7_asp_peer_find_host().

## ◆ DEFUN_ATTR() [6/27]

DEFUN_ATTR | ( | asp_no_quirk | ,
|  | asp_no_quirk_cmd | ,
|  | "OVERWRITTEN" | ,
|  | "OVERWRITTEN\n" | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References asp_quirk_names, osmo_ss7_asp::cfg, and osmo_ss7_asp::quirks.

## ◆ DEFUN_ATTR() [7/27]

DEFUN_ATTR | ( | asp_no_remote_ip | ,
|  | asp_no_remote_ip_cmd | ,
|  | "no remote-ip " | VTY_IPV46_CMD,
|  | NO_STR "Specify Remote IP Address of ASP\n" "Remote IPv4 Address of ASP\n" "Remote IPv6 Address of ASP\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::remote, ss7_asp_peer_del_host(), and ss7_asp_peer_find_host().

## ◆ DEFUN_ATTR() [8/27]

DEFUN_ATTR | ( | asp_no_sctp_param_init | ,
|  | asp_no_sctp_param_init_cmd | ,
|  | "no sctp-param init " | ASP_SCTP_PARAM_INIT_FIELDS,
|  | NO_STR | ASP_SCTP_PARAM_INIT_DESC,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::max_attempts_present, osmo_ss7_asp::max_init_timeo_present, osmo_ss7_asp::max_instreams_present, osmo_ss7_asp::num_ostreams_present, and osmo_ss7_asp::sctp_init.

## ◆ DEFUN_ATTR() [9/27]

DEFUN_ATTR | ( | asp_no_shutdown | ,
|  | asp_no_shutdown_cmd | ,
|  | "no shutdown" | ,
|  | NO_STR "Terminates SCTP association; New associations will be rejected\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::adm_state, osmo_ss7_asp::cfg, osmo_ss7_asp::explicit_shutdown_state_by_vty_since_node_enter, LOGPASP, OSMO_SS7_ASP_ADM_S_ENABLED, osmo_ss7_asp_admin_state_names, and ss7_asp_restart_after_reconfigure().

## ◆ DEFUN_ATTR() [10/27]

DEFUN_ATTR | ( | asp_no_tcp_param_keepalive | ,
|  | asp_no_tcp_param_keepalive_cmd | ,
|  | "no tcp-param keepalive" | ,
|  | NO_STR | ASP_TCP_PARAM_KEEPALIVE_DESC,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::keepalive_enable, and osmo_ss7_asp::tcp.

## ◆ DEFUN_ATTR() [11/27]

DEFUN_ATTR | ( | asp_no_tcp_param_keepalive_cfg | ,
|  | asp_no_tcp_param_keepalive_cfg_cmd | ,
|  | "no tcp-param keepalive " | ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS,
|  | NO_STR | ASP_TCP_PARAM_KEEPALIVE_CFG_DESC,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::keepalive_intvl_present, osmo_ss7_asp::keepalive_probes_present, osmo_ss7_asp::keepalive_time_present, and osmo_ss7_asp::tcp.

## ◆ DEFUN_ATTR() [12/27]

DEFUN_ATTR | ( | asp_no_tcp_param_user_timeout | ,
|  | asp_no_tcp_param_user_timeout_cmd | ,
|  | "no tcp-param user-timeout" | ,
|  | NO_STR | ASP_TCP_PARAM_USER_TIMEOUT_DESC,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::tcp, osmo_ss7_asp::user_timeout_present, and osmo_ss7_asp::user_timeout_value.

## ◆ DEFUN_ATTR() [13/27]

DEFUN_ATTR | ( | asp_qos_clas | ,
|  | asp_qos_class_cmd | ,
|  | "qos-class " | QOS_CLASS_RANGE_STR,
|  | "Specify QoS Class of ASP\n" | QOS_CLASS_RANGE_HELP_STR,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, and osmo_ss7_asp::qos_class.

## ◆ DEFUN_ATTR() [14/27]

DEFUN_ATTR | ( | asp_quirk | ,
|  | asp_quirk_cmd | ,
|  | "OVERWRITTEN" | ,
|  | "OVERWRITTEN\n" | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References asp_quirk_names, osmo_ss7_asp::cfg, and osmo_ss7_asp::quirks.

## ◆ DEFUN_ATTR() [15/27]

DEFUN_ATTR | ( | asp_remote_ip | ,
|  | asp_remote_ip_cmd | ,
|  | "remote-ip " VTY_IPV46_CMD " " | [primary],
|  | "Specify Remote IP Address of ASP\n" "Remote IPv4 Address of ASP\n" "Remote IPv6 Address of ASP\n" "Set remote address as SCTP Primary Address\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp_peer::idx_primary, OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp::proto, osmo_ss7_asp::remote, ss7_asp_apply_primary_address(), ss7_asp_is_started(), and ss7_asp_peer_add_host2().

## ◆ DEFUN_ATTR() [16/27]

DEFUN_ATTR | ( | asp_role | ,
|  | asp_role_cmd | ,
|  | "role (sg|asp|ipsp)" | ,
|  | "Specify the xUA role for this ASP\n" "SG (Signaling Gateway)\n" "ASP (Application Server Process)\n" "IPSP (IP Signalling Point)\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, OSMO_SS7_ASP_ROLE_ASP, OSMO_SS7_ASP_ROLE_SG, osmo_ss7_asp::role, and osmo_ss7_asp::role_set_by_vty.

## ◆ DEFUN_ATTR() [17/27]

DEFUN_ATTR | ( | asp_sctp_param_init | ,
|  | asp_sctp_param_init_cmd | ,
|  | "sctp-param init " ASP_SCTP_PARAM_INIT_FIELDS " <0-65535>" | ,
|  | ASP_SCTP_PARAM_INIT_DESC "Value of the parameter\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::max_attempts_present, osmo_ss7_asp::max_attempts_value, osmo_ss7_asp::max_init_timeo_present, osmo_ss7_asp::max_init_timeo_value, osmo_ss7_asp::max_instreams_present, osmo_ss7_asp::max_instreams_value, osmo_ss7_asp::num_ostreams_present, osmo_ss7_asp::num_ostreams_value, and osmo_ss7_asp::sctp_init.

## ◆ DEFUN_ATTR() [18/27]

DEFUN_ATTR | ( | asp_shutdown | ,
|  | asp_shutdown_cmd | ,
|  | "shutdown" | ,
|  | "Terminates SCTP association; New associations will be rejected\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::adm_state, osmo_ss7_asp::cfg, osmo_ss7_asp::explicit_shutdown_state_by_vty_since_node_enter, LOGPASP, OSMO_SS7_ASP_ADM_S_SHUTDOWN, osmo_ss7_asp_admin_state_names, and ss7_asp_restart_after_reconfigure().

## ◆ DEFUN_ATTR() [19/27]

DEFUN_ATTR | ( | asp_tcp_param_keepalive_cfg | ,
|  | asp_tcp_param_keepalive_cfg_cmd | ,
|  | "tcp-param keepalive " ASP_TCP_PARAM_KEEPALIVE_CFG_FIELDS " <0-65535>" | ,
|  | ASP_TCP_PARAM_KEEPALIVE_CFG_DESC "Value of the parameter\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::keepalive_intvl_present, osmo_ss7_asp::keepalive_intvl_value, osmo_ss7_asp::keepalive_probes_present, osmo_ss7_asp::keepalive_probes_value, osmo_ss7_asp::keepalive_time_present, osmo_ss7_asp::keepalive_time_value, and osmo_ss7_asp::tcp.

## ◆ DEFUN_ATTR() [20/27]

DEFUN_ATTR | ( | asp_tcp_param_keepalive_enabled | ,
|  | asp_tcp_param_keepalive_enabled_cmd | ,
|  | "tcp-param keepalive enabled" | ,
|  | ASP_TCP_PARAM_KEEPALIVE_DESC "Enable TCP keep-alive\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::keepalive_enable, and osmo_ss7_asp::tcp.

## ◆ DEFUN_ATTR() [21/27]

DEFUN_ATTR | ( | asp_tcp_param_user_timeout | ,
|  | asp_tcp_param_user_timeout_cmd | ,
|  | "tcp-param user-timeout <0-65535>" | ,
|  | ASP_TCP_PARAM_USER_TIMEOUT_DESC "Value of the parameter\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::tcp, osmo_ss7_asp::user_timeout_present, and osmo_ss7_asp::user_timeout_value.

## ◆ DEFUN_ATTR() [22/27]

DEFUN_ATTR | ( | asp_timer_lm | ,
|  | asp_timer_lm_cmd | ,
|  | NULL | ,
|  | NULL | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References osmo_ss7_asp::cfg, ss7_asp_lm_timer_names, SS7_ASP_LM_TIMERS_LEN, and osmo_ss7_asp::T_defs_lm.

## ◆ DEFUN_ATTR() [23/27]

DEFUN_ATTR | ( | asp_timer_xua | ,
|  | asp_timer_xua_cmd | ,
|  | NULL | ,
|  | NULL | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References osmo_ss7_asp::cfg, ss7_asp_xua_timer_names, SS7_ASP_XUA_TIMERS_LEN, and osmo_ss7_asp::T_defs_xua.

## ◆ DEFUN_ATTR() [24/27]

DEFUN_ATTR | ( | asp_transport_role | ,
|  | asp_transport_role_cmd | ,
|  | "transport-role (client|server)" | ,
|  | "Specify the transport layer role for this ASP\n" "Operate as a client; connect to a server\n" "Operate as a server; wait for client connections\n" | ,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::is_server, and osmo_ss7_asp::trans_role_set_by_vty.

## ◆ DEFUN_ATTR() [25/27]

DEFUN_ATTR | ( | cs7_asp | ,
|  | cs7_asp_cmd | ,
|  | "asp NAME <0-65535> <0-65535> " | XUA_VAR_STR,
|  | "Configure Application Server Process\n" "Name of ASP\n" "Remote port number\n" "Local port number\n" | XUA_VAR_HELP_STR,
|  | CMD_ATTR_NODE_EXIT |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::description, osmo_ss7_asp::explicit_shutdown_state_by_vty_since_node_enter, osmo_ss7_asp::inst, osmo_ss7_asp::is_server, osmo_ss7_asp::name, osmo_ss7_instance::name, osmo_ss7_asp_find2(), osmo_ss7_asp_find_or_create2(), OSMO_SS7_ASP_PROT_NONE, OSMO_SS7_ASP_ROLE_SG, parse_asp_proto(), parse_trans_proto(), osmo_ss7_asp::proto, osmo_ss7_asp::role, ss7_default_trans_proto_for_asp_proto(), and osmo_ss7_asp::trans_proto.

## ◆ DEFUN_ATTR() [26/27]

DEFUN_ATTR | ( | cs7_asp_audit | ,
|  | cs7_asp_audit_cmd | ,
|  | "cs7 instance <0-15> asp NAME audit point-code POINT_CODE" | ,
|  | CS7_STR "Instance related commands\n" "SS7 Instance Number\n" "ASP related commands\n" "Name of ASP\n" "Audit destination Point Code (xUA DAUD)\n" "Destination Point Code to audit\n" "Destination Point Code value\n" | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References osmo_ss7_asp::cfg, osmo_ss7_asp::inst, osmo_ss7_asp_find_by_name(), OSMO_SS7_ASP_ROLE_ASP, osmo_ss7_asp_role_names, osmo_ss7_instance_find(), osmo_ss7_pointcode_parse(), osmo_ss7_asp::role, and tx_daud_pc().

## ◆ DEFUN_ATTR() [27/27]

DEFUN_ATTR | ( | no_cs7_asp | ,
|  | no_cs7_asp_cmd | ,
|  | "no asp NAME" | ,
|  | NO_STR "Disable Application Server Process\n" "Name of ASP\n" | ,
|  | CMD_ATTR_IMMEDIATE |
| ) |  |

References osmo_ss7_asp::inst, osmo_ss7_asp::name, osmo_ss7_instance::name, osmo_ss7_asp_destroy(), and osmo_ss7_asp_find_by_name().

## ◆ gen_asp_timer_lm_cmd_strs()

static void gen_asp_timer_lm_cmd_strs | ( | struct cmd_element * | cmd | ) |
| static

References NULL, ss7_asp_lm_timer_defaults, and ss7_asp_lm_timer_names.

Referenced by ss7_vty_init_node_asp().

## ◆ gen_asp_timer_xua_cmd_strs()

static void gen_asp_timer_xua_cmd_strs | ( | struct cmd_element * | cmd | ) |
| static

References NULL, ss7_asp_xua_timer_defaults, and ss7_asp_xua_timer_names.

Referenced by ss7_vty_init_node_asp().

## ◆ get_sockname_buf()

static char * get_sockname_buf | ( | char * | buf,
|  | size_t | buf_len,
|  | int | fd,
|  | int | proto,
|  | bool | local
| ) |  |
| static

References NULL.

Referenced by show_one_asp().

## ◆ show_asp()

static int show_asp | ( | struct vty * | vty,
|  | int | id,
|  | const char * | asp_name
| ) |  |
| static

References osmo_ss7_instance::asp_list, osmo_ss7_asp::inst, osmo_ss7_asp::list, NULL, osmo_ss7_asp_find_by_name(), osmo_ss7_instance_find(), and show_one_asp().

Referenced by DEFUN().

## ◆ show_asp_assoc_status()

static int show_asp_assoc_status | ( | struct vty * | vty,
|  | int | id,
|  | const char * | asp_name
| ) |  |
| static

References osmo_ss7_instance::asp_list, osmo_ss7_asp::inst, osmo_ss7_asp::list, NULL, osmo_ss7_asp_find_by_name(), osmo_ss7_instance_find(), and show_one_asp_assoc_status().

Referenced by DEFUN().

## ◆ show_asp_remaddr()

static int show_asp_remaddr | ( | struct vty * | vty,
|  | int | id,
|  | const char * | asp_name
| ) |  |
| static

References osmo_ss7_instance::asp_list, osmo_ss7_asp::inst, osmo_ss7_asp::list, NULL, osmo_ss7_asp_find_by_name(), osmo_ss7_instance_find(), and show_one_asp_remaddr().

Referenced by DEFUN().

## ◆ show_one_asp()

static void show_one_asp | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References as_list_for_asp(), osmo_ss7_asp::cfg, osmo_ss7_asp::fi, get_sockname_buf(), osmo_ss7_asp::is_server, osmo_ss7_asp::local, osmo_ss7_asp::name, osmo_ss7_asp_protocol_vals, osmo_ss7_asp_role_names, osmo_ss7_asp::proto, osmo_ss7_asp::remote, osmo_ss7_asp::role, ss7_asp_get_fd(), ss7_asp_peer_snprintf(), and osmo_ss7_asp::trans_proto.

Referenced by show_asp().

## ◆ show_one_asp_assoc_status()

static void show_one_asp_assoc_status | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, osmo_ss7_asp::name, show_one_asp_assoc_status_tcp(), and osmo_ss7_asp::trans_proto.

Referenced by show_asp_assoc_status().

## ◆ show_one_asp_assoc_status_tcp()

static void show_one_asp_assoc_status_tcp | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, len, osmo_ss7_asp::name, ss7_asp_get_fd(), and tcp_info_state_values.

Referenced by show_one_asp_assoc_status().

## ◆ show_one_asp_remaddr()

static void show_one_asp_remaddr | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, osmo_ss7_asp::name, show_one_asp_remaddr_tcp(), and osmo_ss7_asp::trans_proto.

Referenced by show_asp_remaddr().

## ◆ show_one_asp_remaddr_tcp()

static void show_one_asp_remaddr_tcp | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, len, osmo_ss7_asp::name, ss7_asp_get_fd(), and tcp_info_state_values.

Referenced by show_one_asp_remaddr().

## ◆ ss7_vty_init_node_asp()

void ss7_vty_init_node_asp | ( | void |  | ) |

References asp_node, asp_quirk_descs, asp_quirk_names, g_ctx, gen_asp_timer_lm_cmd_strs(), gen_asp_timer_xua_cmd_strs(), and NULL.

Referenced by vty_init_shared().

## ◆ ss7_vty_node_asp_go_parent()

int ss7_vty_node_asp_go_parent | ( | struct vty * | vty | ) |

References osmo_ss7_asp::cfg, osmo_ss7_asp::explicit_shutdown_state_by_vty_since_node_enter, osmo_ss7_asp::inst, and ss7_asp_restart_after_reconfigure().

Referenced by osmo_ss7_vty_go_parent().

## ◆ ss7_vty_write_one_asp()

void ss7_vty_write_one_asp | ( | struct vty * | vty,
|  | struct osmo_ss7_asp * | asp,
|  | bool | show_dyn_config
| ) |  |

References osmo_ss7_asp::adm_state, asp_quirk_names, osmo_ss7_asp::cfg, osmo_ss7_asp::daud_act, osmo_ss7_asp::description, osmo_ss7_asp::dyn_allocated, osmo_ss7_asp_peer::host, osmo_ss7_asp_peer::host_cnt, osmo_ss7_asp_peer::idx_primary, ipproto_vals, osmo_ss7_asp::is_server, osmo_ss7_asp::keepalive_enable, osmo_ss7_asp::keepalive_intvl_present, osmo_ss7_asp::keepalive_intvl_value, osmo_ss7_asp::keepalive_probes_present, osmo_ss7_asp::keepalive_probes_value, osmo_ss7_asp::keepalive_time_present, osmo_ss7_asp::keepalive_time_value, osmo_ss7_asp::local, osmo_ss7_asp::max_attempts_present, osmo_ss7_asp::max_attempts_value, osmo_ss7_asp::max_init_timeo_present, osmo_ss7_asp::max_init_timeo_value, osmo_ss7_asp::max_instreams_present, osmo_ss7_asp::max_instreams_value, osmo_ss7_asp::name, osmo_ss7_asp::num_ostreams_present, osmo_ss7_asp::num_ostreams_value, OSMO_SS7_ASP_ADM_S_BLOCKED, OSMO_SS7_ASP_ADM_S_ENABLED, OSMO_SS7_ASP_ADM_S_SHUTDOWN, osmo_ss7_asp_protocol_name(), osmo_ss7_asp_role_names, osmo_ss7_asp_peer::port, osmo_ss7_asp::proto, osmo_ss7_asp::qos_class, osmo_ss7_asp::quirks, osmo_ss7_asp::remote, osmo_ss7_asp::role, osmo_ss7_asp::sctp_init, osmo_ss7_asp::simple_client_allocated, ss7_default_trans_proto_for_asp_proto(), osmo_ss7_asp::tcp, osmo_ss7_asp::trans_proto, osmo_ss7_asp::user_timeout_present, osmo_ss7_asp::user_timeout_value, write_asp_timers_lm(), and write_asp_timers_xua().

Referenced by write_one_cs7().

## ◆ tx_daud_pc()

static void tx_daud_pc | ( | struct osmo_ss7_asp * | asp,
|  | uint32_t | pc
| ) |  |
| static

References osmo_ss7_asp::inst, LOGPASP, MAX_PC_STR_LEN, NULL, OSMO_SS7_MAX_RCTX_COUNT, osmo_ss7_pointcode_print_buf(), ss7_asp_get_all_rctx_be(), and xua_tx_snm_daud().

Referenced by DEFUN_ATTR().

## ◆ write_asp_timers_lm()

static void write_asp_timers_lm | ( | struct vty * | vty,
|  | const char * | indent,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, ss7_asp_lm_timer_names, and osmo_ss7_asp::T_defs_lm.

Referenced by ss7_vty_write_one_asp().

## ◆ write_asp_timers_xua()

static void write_asp_timers_xua | ( | struct vty * | vty,
|  | const char * | indent,
|  | struct osmo_ss7_asp * | asp
| ) |  |
| static

References osmo_ss7_asp::cfg, ss7_asp_xua_timer_names, and osmo_ss7_asp::T_defs_xua.

Referenced by ss7_vty_write_one_asp().

## Variable Documentation

## ◆ asp_node

struct cmd_node asp_node
| static

Initial value:
= {
L_CS7_ASP_NODE,
"%s(config-cs7-asp)# ",
1,
}

Referenced by ss7_vty_init_node_asp().

## ◆ asp_quirk_descs

const struct value_string asp_quirk_descs[]
| static

Initial value:
= {
{ OSMO_SS7_ASP_QUIRK_NO_NOTIFY, "Peer SG doesn't send NTFY(AS-INACTIVE) after ASP-UP" },
{ OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP, "Allow Rx of DAUD in ASP role" },
{ OSMO_SS7_ASP_QUIRK_SNM_INACTIVE, "Allow Rx of [S]SNM in AS-INACTIVE state" },
{ 0, NULL }
}
OSMO_SS7_ASP_QUIRK_SNM_INACTIVE
#define OSMO_SS7_ASP_QUIRK_SNM_INACTIVE
Accept SSNM even if ASP is in AS-INACTIVE state.
Definition: osmo_ss7.h:268
OSMO_SS7_ASP_QUIRK_NO_NOTIFY
#define OSMO_SS7_ASP_QUIRK_NO_NOTIFY
Peer SG doesn't send NTFY(AS-INACTIVE) after ASP-UP procedure.
Definition: osmo_ss7.h:264
NULL
int and can be left NULL
Definition: osmo_ss7.h:364
OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP
#define OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP
Accept DAUD in ASP role (RFC states only permitted in ASP->SG role)
Definition: osmo_ss7.h:266

Referenced by ss7_vty_init_node_asp().

## ◆ asp_quirk_names

const struct value_string asp_quirk_names[]
| static

Initial value:
= {
{ OSMO_SS7_ASP_QUIRK_NO_NOTIFY, "no_notify" },
{ OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP, "daud_in_asp" },
{ OSMO_SS7_ASP_QUIRK_SNM_INACTIVE, "snm_inactive" },
{ 0, NULL }
}

Referenced by DEFUN_ATTR(), ss7_vty_init_node_asp(), and ss7_vty_write_one_asp().

## ◆ tcp_info_state_values

const struct value_string tcp_info_state_values[]
| static

Initial value:
= {
{ TCP_ESTABLISHED, "ESTABLISHED" },
{ TCP_SYN_SENT, "SYN_SENT" },
{ TCP_SYN_RECV, "SYN_RECV" },
{ TCP_FIN_WAIT1, "FIN_WAIT1" },
{ TCP_FIN_WAIT2, "FIN_WAIT2" },
{ TCP_TIME_WAIT, "TIME_WAIT" },
{ TCP_CLOSE, "CLOSE" },
{ TCP_CLOSE_WAIT, "CLOSE_WAIT" },
{ TCP_LAST_ACK, "LAST_ACK" },
{ TCP_LISTEN, "LISTEN" },
{ TCP_CLOSING, "CLOSING" },
{}
}

Referenced by show_one_asp_assoc_status_tcp(), and show_one_asp_remaddr_tcp().