RFC 3635 helps also here to define properties of an Ethernet-like interface. 
It's not so as crucial to follow RFC terms and definitions here as it's with 
counters, but we can use it as a guide line. Addresses and promisc mode are 
classification issues. Name and pktio status (stopped / started) ( == 
ifAdminStatus) are pktio level data.


typedef struct odp_pktio_link_state_t {
        uint8_t  type;        // 0: Ethernet (or enum ODP_PKTIO_ETHERNET), ...
        uint8_t  status;      // 1: link up, 0: down, -1 not_present (== 
ifOperStatus )
        uint8_t  autoneg;     // 1: autoneg on, 0: off, -1: not supported
        uint8_t  duplex;      // 1: full duplex, 0: half duplex
        uint32_t speed_mbps;  // Speed in Mbps. This leaves room for
                                   // speed_bps which would support odd (Mbps) 
link speeds
        uint32_t mtu;         // MTU in bytes
} odp_pktio_link_state_t;


Better to use int (uint8_t) than bool to enable extendable status definitions. 
E.g. ifOperStatus == not_present means that some HW component is missing, 
rather than user have configured link down.


-Petri



> -----Original Message-----
> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of EXT
> Maxim Uvarov
> Sent: Tuesday, October 13, 2015 3:39 PM
> To: lng-odp@lists.linaro.org
> Subject: [lng-odp] [API-NEXT PATCHv2] api: pktio link
> 
> Define API to get pktio link state: seed, autoneg, link up/down,
> duplex, started/stopped state.
> 
> Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org>
> ---
>  v2: - use simple struct to return pktio link state;
>      - odp will not modify link, only ready it's state;
> 
> 
>  include/odp/api/packet_io.h | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h
> index d8e69ed..6c77e8d 100644
> --- a/include/odp/api/packet_io.h
> +++ b/include/odp/api/packet_io.h
> @@ -96,6 +96,28 @@ typedef struct odp_pktio_param_t {
>  } odp_pktio_param_t;
> 
>  /**
> + * Packet IO link state information
> + */
> +typedef struct odp_pktio_link_state_t {
> +     uint32_t speed;         /**< Speed in Mbps: 10, 100, 1000 etc */
> +     odp_bool_t up;          /**< 1 - link up, 0 - link down */
> +     odp_bool_t autoneg;     /**< 1 - autoneg on, 0 - off */
> +     odp_bool_t fd;          /**< 1 - full duplex, 0 - half duplex */
> +     odp_bool_t stopped;     /**< 1 - pktio stopped, 0 - started */
> +} odp_pktio_link_state_t;
> +
> +/**
> + * Get packet IO link state
> + *
> + * @param[in] pktio  Packet IO handle
> + * @param[out] state Buffer to save link state
> + *
> + * @retval 0 on success (state info updated)
> + * @retval <0 on failure (state info not updated)
> + */
> +int odp_pktio_link_state(odp_pktio_t pktio, odp_pktio_link_state_t
> *state);
> +
> +/**
>   * Open a packet IO interface
>   *
>   * An ODP program can open a single packet IO interface per device,
> attempts
> --
> 1.9.1
> 
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to