On Fri, Jul 14, 2017 at 8:41 AM, Narayana Prasad Athreya <
pathr...@caviumnetworks.com> wrote:

> Hi Bill
>     The reasons below dont jive with what ODP does today. If the routines
> odp_pktio_mtu() and odp_pktio_mac_addr() exist today. They  assume that MTU
> can be configured and returned to the datapath. As an application
> developer, it does make sense for me to use 2 different paths to talk to
> the same underlying device for the same setting - one path for configuring
> and one for reading the configuration.
>

An application needs to know the MAC address that has been associated with
an interface. Being able to read the MTU was included for completeness. I
have no objection to including the corresponding set functions (along with
the odp_pktio_capability() extensions to indicate whether these are
available--which they most likely will not be in NFV environments) but do
question the need for MTU setting, which should be 9K by default for 10Gb
and higher interfaces.


>
> So from this standpoint the ODP should either support both get and set
> routines or not support either of them.
>
> On the control-plane vs data-plane debate, again as an application
> developer, my integrated application will need access to the underlying
> device for both control and data. If i am forced to right separate code and
> potentially drivers for 2 paths, where is my incentive to use ODP API,
> because anyway i'm losing portability.
>
> Thanks
> Prasad
>
>
> On Friday 14 July 2017 06:33 PM, Bill Fischofer wrote:
>
>
>
> On Fri, Jul 14, 2017 at 6:05 AM, Peltonen, Janne (Nokia - FI/Espoo) <
> janne.pelto...@nokia.com> wrote:
>
>> Hi,
>>
>> ODP API should somewhere define what exactly MTU means in the context of
>> ODP.
>>
>> One can guess that transmission and reception of L2 frames larger than the
>> configured MTU is not guaranteed to succeed, but which bytes are taken
>> into
>> account? For instance, is Ethernet FCS counted towards the MTU?
>>
>>
> We've had this discussion before. The whole concept of MTU is a bit of an
> anachronism from the early days of Ethernet. At speeds ODP is designed for
> (10Gb and above) all equipment should be running with jumbo frames (MTU =
> 9K). All equipment capable of running at these speeds is capable of this
> size, and 9K is the recommended default MTU for this equipment. So there's
> really nothing one should need to control or change here.
>
> It would be interesting to understand the use case that is driving the
> desire to be able to set MTU.
>
> The other consideration is that setting MTU (or MAC address) is a control
> plane function, not a data plane function. Just as the control plane tells
> the data plane which interfaces to use, the control plane is responsible
> for this type of configuration, as well as managing and responding to
> configuration changes. So again, it would be good to understand the use
> case behind wanting to change these values in the data plane.
>
>
>         Janne
>>
>>
>> > -----Original Message-----
>> > From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of
>> Vamsi Attunuru
>> > Sent: Friday, July 14, 2017 1:05 PM
>> > To: lng-odp@lists.linaro.org
>> > Cc: mcha...@cavium.com; pathr...@cavium.com; vattun...@cavium.com;
>> sve...@cavium.com
>> > Subject: [lng-odp] [API-NEXT PATCH v1 1/1] pktio APIs to set the MAC
>> address and MTU size.
>> >
>> > Adds new pktio APIs to set MTU and MAC address on pktio interface.
>> >
>> > Signed-off-by: Vamsi Attunuru <vattun...@cavium.com>
>> > Signed-off-by: Mahipal Challa <mcha...@cavium.com>
>> > Signed-off-by: Shally Verma   <sve...@cavium.com>
>> >
>> > ---
>> >  include/odp/api/spec/packet_io.h | 45 ++++++++++++++++++++++++++++++
>> ++++++++++
>> >  1 file changed, 45 insertions(+)
>> >
>> > diff --git a/include/odp/api/spec/packet_io.h
>> b/include/odp/api/spec/packet_io.h
>> > index 8802089..1269f44 100644
>> > --- a/include/odp/api/spec/packet_io.h
>> > +++ b/include/odp/api/spec/packet_io.h
>> > @@ -451,6 +451,10 @@ typedef union odp_pktio_set_op_t {
>> >       struct {
>> >               /** Promiscuous mode */
>> >               uint32_t promisc_mode : 1;
>> > +             /** MAC address */
>> > +             uint32_t mac : 1;
>> > +             /** MTU size */
>> > +             uint32_t mtu : 1;
>> >       } op;
>> >       /** All bits of the bit field structure.
>> >         * This field can be used to set/clear all flags, or bitwise
>> > @@ -482,6 +486,12 @@ typedef struct odp_pktio_capability_t {
>> >        * A boolean to denote whether loop back mode is supported on this
>> >        * specific interface. */
>> >       odp_bool_t loop_supported;
>> > +
>> > +     /** Maximum MTU size supported */
>> > +     uint32_t max_mtu_size;
>> > +
>> > +     /** Length of MAC address supported on this specific interface */
>> > +     uint32_t mac_addr_len;
>> >  } odp_pktio_capability_t;
>> >
>> >  /**
>> > @@ -912,6 +922,21 @@ int odp_pktout_send(odp_pktout_queue_t queue,
>> const odp_packet_t
>> > packets[],
>> >  uint32_t odp_pktio_mtu(odp_pktio_t pktio);
>> >
>> >  /**
>> > + * Set MTU value of a packet IO interface.
>> > + *
>> > + * Application should pass value upto max_mtu_size as indicated by
>> > + * odp_pktio_capability_t:max_mtu_size. Any value beyond max_mtu_size
>> > + * limit will result in failure.
>> > + *
>> > + * @param pktio  Packet IO handle.
>> > + * @param mtu    MTU value to be set.
>> > + *
>> > + * @return  0 on success
>> > + * @retval <0 on failure
>> > + */
>> > +int odp_pktio_mtu_set(odp_pktio_t pktio, uint32_t mtu);
>> > +
>> > +/**
>> >   * Enable/Disable promiscuous mode on a packet IO interface.
>> >   *
>> >   * @param[in] pktio  Packet IO handle.
>> > @@ -946,6 +971,26 @@ int odp_pktio_promisc_mode(odp_pktio_t pktio);
>> >  int odp_pktio_mac_addr(odp_pktio_t pktio, void *mac_addr, int size);
>> >
>> >  /**
>> > + * Set the MAC address of a packet IO interface.
>> > + *
>> > + * Application should pass mac_addr buffer with size >=
>> > + * odp_pktio_capablity_t:mac_addr_len, size value less than
>> > + * implementation supported will result in API failure.
>> > + *
>> > + * On success, Implementation would read mac_addr buffer bytes
>> > + * upto mac_addr_len value indicated in capability information.
>> > + *
>> > + * @param pktio        Packet IO handle
>> > + * @param mac_addr     Pointer to MAC address to be set
>> > + * @param size         Size of MAC address buffer
>> > + *
>> > + * @return  0 on success
>> > + * @retval <0 on failure
>> > + */
>> > +int odp_pktio_mac_addr_set(odp_pktio_t pktio, const uint8_t *mac_addr,
>> > +               int size);
>> > +
>> > +/**
>> >   * Setup per-port default class-of-service.
>> >   *
>> >   * @param[in]        pktio           Ingress port pktio handle.
>> > --
>> > 1.9.3
>>
>>
>
>

Reply via email to