LCOV - code coverage report
Current view: top level - zephyr/net - ppp.h Hit Total Coverage
Test: new.info Lines: 93 93 100.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2019 Intel Corporation.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief PPP (Point-to-Point Protocol)
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_NET_PPP_H_
      13             : #define ZEPHYR_INCLUDE_NET_PPP_H_
      14             : 
      15             : #include <zephyr/net/net_if.h>
      16             : #include <zephyr/net/net_pkt.h>
      17             : #include <zephyr/net/net_stats.h>
      18             : #include <zephyr/net/net_mgmt.h>
      19             : 
      20             : #ifdef __cplusplus
      21             : extern "C" {
      22             : #endif
      23             : 
      24             : /**
      25             :  * @brief Point-to-point (PPP) L2/driver support functions
      26             :  * @defgroup ppp PPP L2/driver Support Functions
      27             :  * @since 2.0
      28             :  * @version 0.8.0
      29             :  * @ingroup networking
      30             :  * @{
      31             :  */
      32             : 
      33             : /** PPP maximum receive unit (MRU) */
      34           1 : #define PPP_MRU CONFIG_NET_PPP_MTU_MRU
      35             : 
      36             : /** PPP maximum transfer unit (MTU) */
      37           1 : #define PPP_MTU PPP_MRU
      38             : 
      39             : /** Max length of terminate description string */
      40           1 : #define PPP_MAX_TERMINATE_REASON_LEN 32
      41             : 
      42             : /** Length of network interface identifier */
      43           1 : #define PPP_INTERFACE_IDENTIFIER_LEN 8
      44             : 
      45             : /** PPP L2 API */
      46           1 : struct ppp_api {
      47             :         /**
      48             :          * The net_if_api must be placed in first position in this
      49             :          * struct so that we are compatible with network interface API.
      50             :          */
      51           1 :         struct net_if_api iface_api;
      52             : 
      53             :         /** Start the device */
      54           1 :         int (*start)(const struct device *dev);
      55             : 
      56             :         /** Stop the device */
      57           1 :         int (*stop)(const struct device *dev);
      58             : 
      59             :         /** Send a network packet */
      60           1 :         int (*send)(const struct device *dev, struct net_pkt *pkt);
      61             : 
      62             : #if defined(CONFIG_NET_STATISTICS_PPP)
      63             :         /** Collect optional PPP specific statistics. This pointer
      64             :          * should be set by driver if statistics needs to be collected
      65             :          * for that driver.
      66             :          */
      67             :         struct net_stats_ppp *(*get_stats)(const struct device *dev);
      68             : #endif
      69             : };
      70             : 
      71             : /* Make sure that the network interface API is properly setup inside
      72             :  * PPP API struct (it is the first one).
      73             :  */
      74             : BUILD_ASSERT(offsetof(struct ppp_api, iface_api) == 0);
      75             : 
      76             : /**
      77             :  * PPP protocol types.
      78             :  * See https://www.iana.org/assignments/ppp-numbers/ppp-numbers.xhtml
      79             :  * for details.
      80             :  */
      81           1 : enum ppp_protocol_type {
      82             :         PPP_IP     = 0x0021, /**< RFC 1332 */
      83             :         PPP_IPV6   = 0x0057, /**< RFC 5072 */
      84             :         PPP_IPCP   = 0x8021, /**< RFC 1332 */
      85             :         PPP_ECP    = 0x8053, /**< RFC 1968 */
      86             :         PPP_IPV6CP = 0x8057, /**< RFC 5072 */
      87             :         PPP_CCP    = 0x80FD, /**< RFC 1962 */
      88             :         PPP_LCP    = 0xc021, /**< RFC 1661 */
      89             :         PPP_PAP    = 0xc023, /**< RFC 1334 */
      90             :         PPP_CHAP   = 0xc223, /**< RFC 1334 */
      91             :         PPP_EAP    = 0xc227, /**< RFC 2284 */
      92             : };
      93             : 
      94             : /**
      95             :  * PPP phases
      96             :  */
      97           1 : enum ppp_phase {
      98             :         /** Physical-layer not ready */
      99             :         PPP_DEAD,
     100             :         /** Link is being established */
     101             :         PPP_ESTABLISH,
     102             :         /** Link authentication with peer */
     103             :         PPP_AUTH,
     104             :         /** Network connection establishment */
     105             :         PPP_NETWORK,
     106             :         /** Network running */
     107             :         PPP_RUNNING,
     108             :         /** Link termination */
     109             :         PPP_TERMINATE,
     110             : };
     111             : 
     112             : /** @cond INTERNAL_HIDDEN */
     113             : 
     114             : /**
     115             :  * PPP states, RFC 1661 ch. 4.2
     116             :  */
     117             : enum ppp_state {
     118             :         PPP_INITIAL,
     119             :         PPP_STARTING,
     120             :         PPP_CLOSED,
     121             :         PPP_STOPPED,
     122             :         PPP_CLOSING,
     123             :         PPP_STOPPING,
     124             :         PPP_REQUEST_SENT,
     125             :         PPP_ACK_RECEIVED,
     126             :         PPP_ACK_SENT,
     127             :         PPP_OPENED
     128             : };
     129             : 
     130             : /**
     131             :  * PPP protocol operations from RFC 1661
     132             :  */
     133             : enum ppp_packet_type {
     134             :         PPP_CONFIGURE_REQ  = 1,
     135             :         PPP_CONFIGURE_ACK  = 2,
     136             :         PPP_CONFIGURE_NACK = 3,
     137             :         PPP_CONFIGURE_REJ  = 4,
     138             :         PPP_TERMINATE_REQ  = 5,
     139             :         PPP_TERMINATE_ACK  = 6,
     140             :         PPP_CODE_REJ       = 7,
     141             :         PPP_PROTOCOL_REJ   = 8,
     142             :         PPP_ECHO_REQ       = 9,
     143             :         PPP_ECHO_REPLY     = 10,
     144             :         PPP_DISCARD_REQ    = 11
     145             : };
     146             : 
     147             : /** @endcond */
     148             : 
     149             : /**
     150             :  * LCP option types from RFC 1661 ch. 6
     151             :  */
     152           1 : enum lcp_option_type {
     153             :         /** Reserved option value (do not use) */
     154             :         LCP_OPTION_RESERVED = 0,
     155             : 
     156             :         /** Maximum-Receive-Unit */
     157             :         LCP_OPTION_MRU = 1,
     158             : 
     159             :         /** Async-Control-Character-Map */
     160             :         LCP_OPTION_ASYNC_CTRL_CHAR_MAP = 2,
     161             : 
     162             :         /** Authentication-Protocol */
     163             :         LCP_OPTION_AUTH_PROTO = 3,
     164             : 
     165             :         /** Quality-Protocol */
     166             :         LCP_OPTION_QUALITY_PROTO = 4,
     167             : 
     168             :         /** Magic-Number */
     169             :         LCP_OPTION_MAGIC_NUMBER = 5,
     170             : 
     171             :         /** Protocol-Field-Compression */
     172             :         LCP_OPTION_PROTO_COMPRESS = 7,
     173             : 
     174             :         /** Address-and-Control-Field-Compression */
     175             :         LCP_OPTION_ADDR_CTRL_COMPRESS = 8
     176             : } __packed;
     177             : 
     178             : /**
     179             :  * IPCP option types from RFC 1332
     180             :  */
     181           1 : enum ipcp_option_type {
     182             :         /** Reserved IPCP option value (do not use) */
     183             :         IPCP_OPTION_RESERVED = 0,
     184             : 
     185             :         /** IP Addresses */
     186             :         IPCP_OPTION_IP_ADDRESSES = 1,
     187             : 
     188             :         /** IP Compression Protocol */
     189             :         IPCP_OPTION_IP_COMP_PROTO = 2,
     190             : 
     191             :         /** IP Address */
     192             :         IPCP_OPTION_IP_ADDRESS = 3,
     193             : 
     194             :         /* RFC 1877 */
     195             : 
     196             :         /** Primary DNS Server Address */
     197             :         IPCP_OPTION_DNS1 = 129,
     198             : 
     199             :         /** Primary NBNS Server Address */
     200             :         IPCP_OPTION_NBNS1 = 130,
     201             : 
     202             :         /** Secondary DNS Server Address */
     203             :         IPCP_OPTION_DNS2 = 131,
     204             : 
     205             :         /** Secondary NBNS Server Address */
     206             :         IPCP_OPTION_NBNS2 = 132,
     207             : } __packed;
     208             : 
     209             : /**
     210             :  * IPV6CP option types from RFC 5072
     211             :  */
     212           1 : enum ipv6cp_option_type {
     213             :         /** Reserved IPV6CP option value (do not use) */
     214             :         IPV6CP_OPTION_RESERVED = 0,
     215             : 
     216             :         /** Interface identifier */
     217             :         IPV6CP_OPTION_INTERFACE_IDENTIFIER = 1,
     218             : } __packed;
     219             : 
     220             : /**
     221             :  * @typedef net_ppp_lcp_echo_reply_cb_t
     222             :  * @brief A callback function that can be called if a Echo-Reply needs to
     223             :  *        be received.
     224             :  * @param user_data User settable data that is passed to the callback
     225             :  *        function.
     226             :  * @param user_data_len Length of the user data.
     227             :  */
     228           1 : typedef void (*net_ppp_lcp_echo_reply_cb_t)(void *user_data,
     229             :                                             size_t user_data_len);
     230             : 
     231             : struct ppp_my_option_data;
     232             : struct ppp_my_option_info;
     233             : 
     234             : /**
     235             :  * Generic PPP Finite State Machine
     236             :  */
     237           1 : struct ppp_fsm {
     238             :         /** Timeout timer */
     239           1 :         struct k_work_delayable timer;
     240             : 
     241             :         /** FSM callbacks */
     242             :         struct {
     243             :                 /** Acknowledge Configuration Information */
     244           1 :                 int (*config_info_ack)(struct ppp_fsm *fsm,
     245             :                                        struct net_pkt *pkt,
     246             :                                        uint16_t length);
     247             : 
     248             :                 /** Add Configuration Information */
     249             :                 struct net_pkt *(*config_info_add)(struct ppp_fsm *fsm);
     250             : 
     251             :                 /** Length of Configuration Information */
     252           1 :                 int  (*config_info_len)(struct ppp_fsm *fsm);
     253             : 
     254             :                 /** Negative Acknowledge Configuration Information */
     255           1 :                 int (*config_info_nack)(struct ppp_fsm *fsm,
     256             :                                         struct net_pkt *pkt,
     257             :                                         uint16_t length,
     258             :                                         bool rejected);
     259             : 
     260             :                 /** Request peer's Configuration Information */
     261           1 :                 int (*config_info_req)(struct ppp_fsm *fsm,
     262             :                                        struct net_pkt *pkt,
     263             :                                        uint16_t length,
     264             :                                        struct net_pkt *ret_pkt);
     265             : 
     266             :                 /** Reject Configuration Information */
     267           1 :                 int (*config_info_rej)(struct ppp_fsm *fsm,
     268             :                                        struct net_pkt *pkt,
     269             :                                        uint16_t length);
     270             : 
     271             :                 /** Reset Configuration Information */
     272           1 :                 void (*config_info_reset)(struct ppp_fsm *fsm);
     273             : 
     274             :                 /** FSM goes to OPENED state */
     275           1 :                 void (*up)(struct ppp_fsm *fsm);
     276             : 
     277             :                 /** FSM leaves OPENED state */
     278           1 :                 void (*down)(struct ppp_fsm *fsm);
     279             : 
     280             :                 /** Starting this protocol */
     281           1 :                 void (*starting)(struct ppp_fsm *fsm);
     282             : 
     283             :                 /** Quitting this protocol */
     284           1 :                 void (*finished)(struct ppp_fsm *fsm);
     285             : 
     286             :                 /** We received Protocol-Reject */
     287           1 :                 void (*proto_reject)(struct ppp_fsm *fsm);
     288             : 
     289             :                 /** Retransmit */
     290           1 :                 void (*retransmit)(struct ppp_fsm *fsm);
     291             : 
     292             :                 /** Any code that is not understood by PPP is passed to
     293             :                  * this FSM for further processing.
     294             :                  */
     295             :                 enum net_verdict (*proto_extension)(struct ppp_fsm *fsm,
     296             :                                                     enum ppp_packet_type code,
     297             :                                                     uint8_t id,
     298             :                                                     struct net_pkt *pkt);
     299           1 :         } cb;
     300             : 
     301             :         /** My options */
     302             :         struct {
     303             :                 /** Options information */
     304           1 :                 const struct ppp_my_option_info *info;
     305             : 
     306             :                 /** Options negotiation data */
     307           1 :                 struct ppp_my_option_data *data;
     308             : 
     309             :                 /** Number of negotiated options */
     310           1 :                 size_t count;
     311           1 :         } my_options;
     312             : 
     313             :         /** Option bits */
     314           1 :         uint32_t flags;
     315             : 
     316             :         /** Number of re-transmissions left */;
     317           1 :         uint32_t retransmits;
     318             : 
     319             :         /** Number of NACK loops since last ACK */
     320           1 :         uint32_t nack_loops;
     321             : 
     322             :         /** Number of NACKs received */
     323           1 :         uint32_t recv_nack_loops;
     324             : 
     325             :         /** Reason for closing protocol */
     326           1 :         char terminate_reason[PPP_MAX_TERMINATE_REASON_LEN];
     327             : 
     328             :         /** PPP protocol number for this FSM */
     329           1 :         uint16_t protocol;
     330             : 
     331             :         /** Current state of PPP link */
     332           1 :         enum ppp_state state;
     333             : 
     334             :         /** Protocol/layer name of this FSM (for debugging) */
     335           1 :         const char *name;
     336             : 
     337             :         /** Current id */
     338           1 :         uint8_t id;
     339             : 
     340             :         /** Current request id */
     341           1 :         uint8_t req_id;
     342             : 
     343             :         /** Have received valid Ack, Nack or Reject to a Request */
     344           1 :         uint8_t ack_received : 1;
     345             : };
     346             : 
     347             : /** @cond INTERNAL_HIDDEN */
     348             : 
     349             : #define PPP_MY_OPTION_ACKED     BIT(0)
     350             : #define PPP_MY_OPTION_REJECTED  BIT(1)
     351             : 
     352             : struct ppp_my_option_data {
     353             :         uint32_t flags;
     354             : };
     355             : 
     356             : #define IPCP_NUM_MY_OPTIONS     3
     357             : #define IPV6CP_NUM_MY_OPTIONS   1
     358             : 
     359             : enum ppp_flags {
     360             :         PPP_CARRIER_UP,
     361             : };
     362             : 
     363             : /** @endcond */
     364             : 
     365             : /** Link control protocol options */
     366           1 : struct lcp_options {
     367             :         /** Magic number */
     368           1 :         uint32_t magic;
     369             : 
     370             :         /** Async char map */
     371           1 :         uint32_t async_map;
     372             : 
     373             :         /** Maximum Receive Unit value */
     374           1 :         uint16_t mru;
     375             : 
     376             :         /** Which authentication protocol was negotiated (0 means none) */
     377           1 :         uint16_t auth_proto;
     378             : };
     379             : 
     380             : #if defined(CONFIG_NET_L2_PPP_OPTION_MRU)
     381             : #define LCP_NUM_MY_OPTIONS      1
     382             : #endif
     383             : 
     384             : /** IPv4 control protocol options */
     385           1 : struct ipcp_options {
     386             :         /** IPv4 address */
     387           1 :         struct in_addr address;
     388             : 
     389             :         /** Primary DNS server address */
     390           1 :         struct in_addr dns1_address;
     391             : 
     392             :         /** Secondary DNS server address */
     393           1 :         struct in_addr dns2_address;
     394             : };
     395             : 
     396             : /** IPv6 control protocol options */
     397           1 : struct ipv6cp_options {
     398             :         /** Interface identifier */
     399           1 :         uint8_t iid[PPP_INTERFACE_IDENTIFIER_LEN];
     400             : };
     401             : 
     402             : /** PPP L2 context specific to certain network interface */
     403           1 : struct ppp_context {
     404             :         /** Flags representing PPP state, which are accessed from multiple
     405             :          * threads.
     406             :          */
     407           1 :         atomic_t flags;
     408             : 
     409             :         /** PPP startup worker. */
     410           1 :         struct k_work_delayable startup;
     411             : 
     412             :         /** LCP options */
     413             :         struct {
     414             :                 /** Finite state machine for LCP */
     415           1 :                 struct ppp_fsm fsm;
     416             : 
     417             :                 /** Options that we want to request */
     418           1 :                 struct lcp_options my_options;
     419             : 
     420             :                 /** Options that peer want to request */
     421           1 :                 struct lcp_options peer_options;
     422             : 
     423             :                 /** Magic-Number value */
     424           1 :                 uint32_t magic;
     425             : #if defined(CONFIG_NET_L2_PPP_OPTION_MRU)
     426             :                 struct ppp_my_option_data my_options_data[LCP_NUM_MY_OPTIONS];
     427             : #endif
     428           1 :         } lcp;
     429             : 
     430             : #if defined(CONFIG_NET_IPV4)
     431             :         /** ICMP options */
     432             :         struct {
     433             :                 /** Finite state machine for IPCP */
     434             :                 struct ppp_fsm fsm;
     435             : 
     436             :                 /** Options that we want to request */
     437             :                 struct ipcp_options my_options;
     438             : 
     439             :                 /** Options that peer want to request */
     440             :                 struct ipcp_options peer_options;
     441             : 
     442             :                 /** My options runtime data */
     443             :                 struct ppp_my_option_data my_options_data[IPCP_NUM_MY_OPTIONS];
     444             :         } ipcp;
     445             : #endif
     446             : 
     447             : #if defined(CONFIG_NET_IPV6)
     448             :         /** IPV6CP options */
     449             :         struct {
     450             :                 /** Finite state machine for IPV6CP */
     451             :                 struct ppp_fsm fsm;
     452             : 
     453             :                 /** Options that we want to request */
     454             :                 struct ipv6cp_options my_options;
     455             : 
     456             :                 /** Options that peer want to request */
     457             :                 struct ipv6cp_options peer_options;
     458             : 
     459             :                 /** My options runtime data */
     460             :                 struct ppp_my_option_data my_options_data[IPV6CP_NUM_MY_OPTIONS];
     461             :         } ipv6cp;
     462             : #endif
     463             : 
     464             : #if defined(CONFIG_NET_L2_PPP_PAP)
     465             :         /** PAP options */
     466             :         struct {
     467             :                 /** Finite state machine for PAP */
     468             :                 struct ppp_fsm fsm;
     469             :         } pap;
     470             : #endif
     471             : 
     472             : #if defined(CONFIG_NET_SHELL)
     473             :         /** Network shell PPP command internal data */
     474             :         struct {
     475             :                 /** Ping command internal data */
     476             :                 struct {
     477             :                         /** Callback to be called when Echo-Reply is received.
     478             :                          */
     479             :                         net_ppp_lcp_echo_reply_cb_t cb;
     480             : 
     481             :                         /** User specific data for the callback */
     482             :                         void *user_data;
     483             : 
     484             :                         /** User data length */
     485             :                         size_t user_data_len;
     486             :                 } echo_reply;
     487             : 
     488             :                 /** Used when waiting Echo-Reply */
     489             :                 struct k_sem wait_echo_reply;
     490             : 
     491             :                 /** Echo-Req data value */
     492             :                 uint32_t echo_req_data;
     493             : 
     494             :                 /** Echo-Reply data value */
     495             :                 uint32_t echo_reply_data;
     496             :         } shell;
     497             : #endif
     498             : 
     499             :         /** Network interface related to this PPP connection */
     500           1 :         struct net_if *iface;
     501             : 
     502             :         /** Network management callback structure */
     503           1 :         struct net_mgmt_event_callback mgmt_evt_cb;
     504             : 
     505             :         /** Current phase of PPP link */
     506           1 :         enum ppp_phase phase;
     507             : 
     508             :         /** Signal when PPP link is terminated */
     509           1 :         struct k_sem wait_ppp_link_terminated;
     510             : 
     511             :         /** Signal when PPP link is down */
     512           1 :         struct k_sem wait_ppp_link_down;
     513             : 
     514             :         /** This tells what features the PPP supports. */
     515           1 :         enum net_l2_flags ppp_l2_flags;
     516             : 
     517             :         /** This tells how many network protocols are open */
     518           1 :         int network_protos_open;
     519             : 
     520             :         /** This tells how many network protocols are up */
     521           1 :         int network_protos_up;
     522             : 
     523             :         /** Is PPP ready to receive packets */
     524           1 :         uint16_t is_ready_to_serve : 1;
     525             : 
     526             :         /** Is PPP L2 enabled or not */
     527           1 :         uint16_t is_enabled : 1;
     528             : 
     529             :         /** PPP enable pending */
     530           1 :         uint16_t is_enable_done : 1;
     531             : 
     532             :         /** IPCP status (up / down) */
     533           1 :         uint16_t is_ipcp_up : 1;
     534             : 
     535             :         /** IPCP open status (open / closed) */
     536           1 :         uint16_t is_ipcp_open : 1;
     537             : 
     538             :         /** IPV6CP status (up / down) */
     539           1 :         uint16_t is_ipv6cp_up : 1;
     540             : 
     541             :         /** IPV6CP open status (open / closed) */
     542           1 :         uint16_t is_ipv6cp_open : 1;
     543             : 
     544             :         /** PAP status (up / down) */
     545           1 :         uint16_t is_pap_up : 1;
     546             : 
     547             :         /** PAP open status (open / closed) */
     548           1 :         uint16_t is_pap_open : 1;
     549             : };
     550             : 
     551             : /**
     552             :  * @brief Initialize PPP L2 stack for a given interface
     553             :  *
     554             :  * @param iface A valid pointer to a network interface
     555             :  */
     556           1 : void net_ppp_init(struct net_if *iface);
     557             : 
     558             : /* Management API for PPP */
     559             : 
     560             : /** @cond INTERNAL_HIDDEN */
     561             : 
     562             : #define PPP_L2_CTX_TYPE struct ppp_context
     563             : 
     564             : #define _NET_PPP_LAYER  NET_MGMT_LAYER_L2
     565             : #define _NET_PPP_CODE   0x209
     566             : #define _NET_PPP_BASE   (NET_MGMT_IFACE_BIT |                           \
     567             :                          NET_MGMT_LAYER(_NET_PPP_LAYER) |               \
     568             :                          NET_MGMT_LAYER_CODE(_NET_PPP_CODE))
     569             : #define _NET_PPP_EVENT  (_NET_PPP_BASE | NET_MGMT_EVENT_BIT)
     570             : 
     571             : enum net_event_ppp_cmd {
     572             :         NET_EVENT_PPP_CMD_CARRIER_ON = 1,
     573             :         NET_EVENT_PPP_CMD_CARRIER_OFF,
     574             :         NET_EVENT_PPP_CMD_PHASE_RUNNING,
     575             :         NET_EVENT_PPP_CMD_PHASE_DEAD,
     576             : };
     577             : 
     578             : struct net_if;
     579             : 
     580             : /** @endcond */
     581             : 
     582             : /** Event emitted when PPP carrier is on */
     583           1 : #define NET_EVENT_PPP_CARRIER_ON                                        \
     584             :         (_NET_PPP_EVENT | NET_EVENT_PPP_CMD_CARRIER_ON)
     585             : 
     586             : /** Event emitted when PPP carrier is off */
     587           1 : #define NET_EVENT_PPP_CARRIER_OFF                                       \
     588             :         (_NET_PPP_EVENT | NET_EVENT_PPP_CMD_CARRIER_OFF)
     589             : 
     590             : /** Event emitted when PPP goes into running phase */
     591           1 : #define NET_EVENT_PPP_PHASE_RUNNING                                     \
     592             :         (_NET_PPP_EVENT | NET_EVENT_PPP_CMD_PHASE_RUNNING)
     593             : 
     594             : /** Event emitted when PPP goes into dead phase */
     595           1 : #define NET_EVENT_PPP_PHASE_DEAD                                        \
     596             :         (_NET_PPP_EVENT | NET_EVENT_PPP_CMD_PHASE_DEAD)
     597             : 
     598             : /**
     599             :  * @brief Raise CARRIER_ON event when PPP is connected.
     600             :  *
     601             :  * @param iface PPP network interface.
     602             :  */
     603             : #if defined(CONFIG_NET_L2_PPP_MGMT)
     604             : void ppp_mgmt_raise_carrier_on_event(struct net_if *iface);
     605             : #else
     606           1 : static inline void ppp_mgmt_raise_carrier_on_event(struct net_if *iface)
     607             : {
     608             :         ARG_UNUSED(iface);
     609             : }
     610             : #endif
     611             : 
     612             : /**
     613             :  * @brief Raise CARRIER_OFF event when PPP is disconnected.
     614             :  *
     615             :  * @param iface PPP network interface.
     616             :  */
     617             : #if defined(CONFIG_NET_L2_PPP_MGMT)
     618             : void ppp_mgmt_raise_carrier_off_event(struct net_if *iface);
     619             : #else
     620           1 : static inline void ppp_mgmt_raise_carrier_off_event(struct net_if *iface)
     621             : {
     622             :         ARG_UNUSED(iface);
     623             : }
     624             : #endif
     625             : 
     626             : /**
     627             :  * @brief Raise PHASE_RUNNING event when PPP reaching RUNNING phase
     628             :  *
     629             :  * @param iface PPP network interface.
     630             :  */
     631             : #if defined(CONFIG_NET_L2_PPP_MGMT)
     632             : void ppp_mgmt_raise_phase_running_event(struct net_if *iface);
     633             : #else
     634           1 : static inline void ppp_mgmt_raise_phase_running_event(struct net_if *iface)
     635             : {
     636             :         ARG_UNUSED(iface);
     637             : }
     638             : #endif
     639             : 
     640             : /**
     641             :  * @brief Raise PHASE_DEAD event when PPP reaching DEAD phase
     642             :  *
     643             :  * @param iface PPP network interface.
     644             :  */
     645             : #if defined(CONFIG_NET_L2_PPP_MGMT)
     646             : void ppp_mgmt_raise_phase_dead_event(struct net_if *iface);
     647             : #else
     648           1 : static inline void ppp_mgmt_raise_phase_dead_event(struct net_if *iface)
     649             : {
     650             :         ARG_UNUSED(iface);
     651             : }
     652             : #endif
     653             : 
     654             : /**
     655             :  * @brief Send PPP Echo-Request to peer. We expect to receive Echo-Reply back.
     656             :  *
     657             :  * @param idx PPP network interface index
     658             :  * @param timeout Amount of time to wait Echo-Reply. The value is in
     659             :  * milliseconds.
     660             :  *
     661             :  * @return 0 if Echo-Reply was received, < 0 if there is a timeout or network
     662             :  * index is not a valid PPP network index.
     663             :  */
     664             : #if defined(CONFIG_NET_L2_PPP)
     665             : int net_ppp_ping(int idx, int32_t timeout);
     666             : #else
     667           1 : static inline int net_ppp_ping(int idx, int32_t timeout)
     668             : {
     669             :         ARG_UNUSED(idx);
     670             :         ARG_UNUSED(timeout);
     671             : 
     672             :         return -ENOTSUP;
     673             : }
     674             : #endif
     675             : 
     676             : /**
     677             :  * @brief Get PPP context information. This is only used by net-shell to
     678             :  * print information about PPP.
     679             :  *
     680             :  * @param idx PPP network interface index
     681             :  *
     682             :  * @return PPP context or NULL if idx is invalid.
     683             :  */
     684             : #if defined(CONFIG_NET_L2_PPP) && defined(CONFIG_NET_SHELL)
     685             : struct ppp_context *net_ppp_context_get(int idx);
     686             : #else
     687           1 : static inline struct ppp_context *net_ppp_context_get(int idx)
     688             : {
     689             :         ARG_UNUSED(idx);
     690             : 
     691             :         return NULL;
     692             : }
     693             : #endif
     694             : 
     695             : #ifdef __cplusplus
     696             : }
     697             : #endif
     698             : 
     699             : /**
     700             :  * @}
     701             :  */
     702             : 
     703             : #endif /* ZEPHYR_INCLUDE_NET_PPP_H_ */

Generated by: LCOV version 1.14