On Tue, Jul 18, 2017 at 11:52 AM, Maxim Uvarov <maxim.uva...@linaro.org>
wrote:

> On 07/18/17 19:20, Bill Fischofer wrote:
> > As agreed during today's ODP Public call:
> >
> > APIs for MTU capability and setting OK. Applications should remember that
> > in most cases they will not be authorized to set the MTU since this
> relates
> > to physical properties of the interface.
> >
> > odp_pktio_capability() should report number of mac addrs supported in
> > addition to whether they are settable.
> >
> > odp_pktio_mac_addr_set() should take index value of which addr to set
> >
> > For compatibility may be better to leave odp_pktio_mac_addr() as is and
> by
> > implication it retrieves mac addr 0. New API odp_pktio_mac_addr_get() can
> > support explicit index.
> >
> > API patch can be merged separately but we still need reference
> > implementation, validation test suite and documentation updates to make
> > this eligible for release.
> >
>
> indexes might be not very multi hardware friendly.
> I think we can do something similar to switchdev functions. Take a look
> at kernel:
> switchdev_port_fdb_add()
> switchdev_port_fdb_del()
> switchdev_port_fdb_dump()
>

I'm not quite sure why you think this may be the case. All we're saying is
that a pktio is a logical interface that supports 1 or more MAC addresses
that are indexed (per-pktio) from 0. How a given index gets mapped to HW
resources that may be behind a pktio object is implementation-dependent. So
this is really no different than a pktio device supporting multiple pktin
or pktout queues, which are similarly indexed.


>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/
> linux.git/tree/net/switchdev/switchdev.c?h=v4.13-rc1
>
> Maxim.
>
> >
> > On Mon, Jul 17, 2017 at 3:09 AM, Bogdan Pricope <
> bogdan.pric...@linaro.org>
> > wrote:
> >
> >> Hi,
> >>
> >> In DPDK case, default MTU is 1500:
> >>
> >> /*
> >>  * Set the default MTU.
> >>  */
> >> eth_dev->data->mtu = ETHER_MTU;
> >>
> >>
> >> where:
> >>
> >> #define ETHER_MTU       \
> >>
> >>             (ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) /**<
> >> Ethernet MTU. */
> >>
> >>
> >> So, if you need to jumbo, you have to set MTU yourself (I guess dpdk
> >> will not send the frames otherwise):
> >>
> >> rte_eth_dev_set_mtu(pktio_entry->s.pkt_dpdk.portid, JUMBO_MTU_VALUE);
> >>
> >> So, it depends on how underneath SDK is working …
> >>
> >>
> >> BR,
> >> Bogdan
> >>
> >> On 14 July 2017 at 21:53, Bill Fischofer <bill.fischo...@linaro.org>
> >> wrote:
> >>>
> >>>
> >>> On Fri, Jul 14, 2017 at 10:09 AM, Peltonen, Janne (Nokia - FI/Espoo)
> >>> <janne.pelto...@nokia.com> wrote:
> >>>>
> >>>> Hi,
> >>>>
> >>>>
> >>>>
> >>>> I think MAC addresses and MTU are a bit different.
> >>>>
> >>>>
> >>>>
> >>>> There are valid use cases for application wanting to set the MAC
> >> address,
> >>>> even dynamically. For instance, with VRRP one wants to receive packets
> >>>> destined to a VRRP MAC address in addition to the fixed MAC address
> of a
> >>>> port. The possibility of configuring multiple MAC addresses (for the
> >> purpose
> >>>> of RX frame filtering) to the same port and changing them dynamically
> >> would
> >>>> be useful to some apps.
> >>>>
> >>>> The physical MTU of a port is more like a capability, the maximum that
> >> the
> >>>> port can do. The ODP application can then use any frame sizes it
> wants,
> >> up
> >>>> to the maximum size, without configuring anything to ODP. e.g. IP
> layer
> >> MTUs
> >>>> can be maintained by an IP stack application while the physical MTU at
> >> ODP
> >>>> level stays at the fixed maximum. An application does not have a need
> to
> >>>> tell ODP that the maximum frame size should be limited, but an ODP
> >>>> implementation might conceivably wish to get such information from the
> >>>> application or from elsewhere if supporting big frames (i.e. enabling
> >> jumbo
> >>>> frames) involves some costs that the ODP implementation would rather
> >> avoid
> >>>> if the application does not really need big frames.
> >>>>
> >>>>
> >>>>
> >>>> Even if MTU configuration is not added in ODP API, it is useful to be
> >> able
> >>>> to query the maximum physical MTU of a port as that can vary also
> among
> >> HW
> >>>> that supports pretty big frame sizes. The meaning of the returned MTU
> >> value
> >>>> (i.e. which bytes are counted) should be clarified.
> >>>
> >>>
> >>> I agree with this, however the historical reason for MTU was hardware
> >>> limits. When a driver transmits a packet, the physical MAC stores the
> >> bytes
> >>> of this packet in a FIFO (hardware registers) as the bits are clocked
> >>> through the PHY layer. Historically these registers were costly, so
> >>> minimizing them was important to meet needed price points. Today, as
> >> silicon
> >>> prices have fallen dramatically and even low-end processors have
> >>> multi-megabyte caches, there's little cost reasons for such low
> physical
> >>> limits. Moreover, at 10Gb and above speeds, you don't want to be
> filling
> >> the
> >>> pipe with IPG and framing bits, so larger packet sizes are inherently
> >> more
> >>> efficient. The result is that it's very difficult to fine a NIC in any
> >>> modern system that doesn't support jumbo frames, so the utility of
> >> setting
> >>> the MTU to anything other than 9K (especially for link speeds of
> >> interest to
> >>> ODP applications) is questionable.
> >>>
> >>>>
> >>>>
> >>>>
> >>>>                              Janne
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> From: Bill Fischofer [mailto:bill.fischo...@linaro.org]
> >>>> Sent: Friday, July 14, 2017 5:39 PM
> >>>> To: Bogdan Pricope <bogdan.pric...@linaro.org>; Petri Savolainen
> >>>> <petri.savolai...@linaro.org>
> >>>> Cc: Narayana Prasad Athreya <pathr...@caviumnetworks.com>; Peltonen,
> >> Janne
> >>>> (Nokia - FI/Espoo) <janne.pelto...@nokia.com>; mcha...@cavium.com;
> >>>> lng-odp@lists.linaro.org; pathr...@cavium.com; vattun...@cavium.com;
> >>>> sve...@cavium.com
> >>>> Subject: Re: [lng-odp] [API-NEXT PATCH v1 1/1] pktio APIs to set the
> MAC
> >>>> address and MTU size.
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> On Fri, Jul 14, 2017 at 9:11 AM, Bogdan Pricope
> >>>> <bogdan.pric...@linaro.org> wrote:
> >>>>
> >>>> Hi,
> >>>>
> >>>> I think we need both MTU and MAC address to be settable from ODP.
> >>>>
> >>>> In OFP, at some point I was considering using tap pktio instead of ofp
> >>>> tap interface for slow path processing - not being able to set MAC
> >>>> address was A problem.
> >>>> What about DHCP by MAC address? Maybe there are systems where
> >>>> predefined MAC address is a requirement... don't know...
> >>>>
> >>>> MTU: what if default value is not 9K but something else?
> >>>>
> >>>>
> >>>>
> >>>> I'll add this to the agenda for Monday's ARCH call. If Petri (+cc)
> wants
> >>>> to chime in before he leaves for vacation we'll take that input as
> well.
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> BR,
> >>>> Bogdan
> >>>>
> >>>>
> >>>> On 14 July 2017 at 16:41, 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.
> >>>>>
> >>>>> 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 <mailto: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
> >>>>>>     <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 <mailto:lng-odp@lists.linaro.org
> >
> >>>>>>     > Cc: mcha...@cavium.com <mailto:mcha...@cavium.com>;
> >>>>>>     pathr...@cavium.com <mailto:pathr...@cavium.com>;
> >>>>>>     vattun...@cavium.com <mailto:vattun...@cavium.com>;
> >>>>>>     sve...@cavium.com <mailto: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
> >>>>>>     <mailto:vattun...@cavium.com>>
> >>>>>>     > Signed-off-by: Mahipal Challa <mcha...@cavium.com
> >>>>>>     <mailto:mcha...@cavium.com>>
> >>>>>>     > Signed-off-by: Shally Verma   <sve...@cavium.com
> >>>>>>     <mailto: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