Re: [lng-odp] [PATCH API-NEXT v1 1/1] api:pktio: Adds MTU set function.
On Tue, Aug 8, 2017 at 5:08 PM, Bill Fischofer <bill.fischo...@linaro.org> wrote: > > > On Tue, Aug 8, 2017 at 2:38 AM, Vamsi Attunuru <vamsi.cav...@gmail.com> > wrote: > >> Signed-off-by: Vamsi Attunuru <vattun...@cavium.com> >> Signed-off-by: Shally Verma <sve...@cavium.com> >> Signed-off-by: Mahipal Challa <mcha...@cavium.com> >> >> --- >> include/odp/api/spec/packet_io.h | 21 + >> 1 file changed, 21 insertions(+) >> >> diff --git a/include/odp/api/spec/packet_io.h >> b/include/odp/api/spec/packet_io.h >> index d42cebf..be81c3d 100644 >> --- a/include/odp/api/spec/packet_io.h >> +++ b/include/odp/api/spec/packet_io.h >> @@ -452,6 +452,9 @@ typedef union odp_pktio_set_op_t { >> struct { >> /** Promiscuous mode */ >> uint32_t promisc_mode : 1; >> + >> + /** Allow app to set MTU size */ >> + uint32_t mtu_set : 1; >> } op; >> /** All bits of the bit field structure. >> * This field can be used to set/clear all flags, or bitwise >> @@ -480,6 +483,9 @@ typedef struct odp_pktio_capability_t { >> >> /** @deprecated Use enable_loop inside odp_pktin_config_t */ >> odp_bool_t ODP_DEPRECATE(loop_supported); >> + >> + /** Maximum MTU size supported */ >> + uint32_t max_mtu_size; >> } odp_pktio_capability_t; >> >> /** >> @@ -910,6 +916,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. mtu value < 68 also results in failure. >> > > Seems like it would be better to have an explicit min_mtu_size in the > odp_pktio_capability() than this arbitrary note buried as a comment. > sure, will add min_mtu_size field in odp_paktio_capability_t. >From the last discussion, odp_pktio_config() api was suggested instead of set_mtu() api, if my understanding is correct, Is the following sequence allowed to occur multiple times like stop pktio interface, call pktio_config() and start pktio interface. > > >> + * >> + * @param pktio Packet IO handle. >> + * @param mtuMTU 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] pktioPacket IO handle. >> -- >> 1.9.3 >> >> >
Re: [lng-odp] [PATCH API-NEXT v2 1/1] api:pktio: Adds MTU set function.
On Tue, Aug 29, 2017 at 3:36 PM, Vamsi Attunuru <vamsi.cav...@gmail.com> wrote: > Signed-off-by: Vamsi Attunuru <vattun...@cavium.com> > Signed-off-by: Shally Verma <sve...@cavium.com> > Signed-off-by: Mahipal Challa <mcha...@cavium.com> > > --- > include/odp/api/spec/packet_io.h | 43 +- > -- > 1 file changed, 23 insertions(+), 20 deletions(-) > > diff --git a/include/odp/api/spec/packet_io.h > b/include/odp/api/spec/packet_io.h > index be81c3d..c372a2a 100644 > --- a/include/odp/api/spec/packet_io.h > +++ b/include/odp/api/spec/packet_io.h > @@ -440,6 +440,29 @@ typedef struct odp_pktio_config_t { > */ > odp_bool_t outbound_ipsec; > > + /** MTU size of the pktio interface. > +* > +* It's the frame size which the pktio can transmit without > fragmentation. > +* And it does not count L2 header bytes, FCS and VLAN tag bytes. > Discussion on the number of bytes accounted for MTU size calculation was not concluded in last public call. I am wondering how ODP is different from other implementations, where most of the implementations (which facilitate networking applications to send over the pkts) are not considering L2 headers & checksum as part of it MTU size calculations,( it does consider those for frame size calculations) and there also, the application pushes the entire ethernet frame(1500+14 bytes) to the underneath implementation. any other suggestions are welcome. > +* > +* pktio interface must be able to send and receive packets up to > +* this MTU size successfully. Trying to send or receive packets > larger > +* than these MTU results in undefined behavior. > +* > +* By default, pktio is configured with max support MTU size. > +* > Will take care of explaining default value. > +* Max supported MTU can be read through these parameter > +* as part of odp_pktio_capability() routine. > +* > +* MTU can be modified by passing valid > odp_pktio_config_t:mtu_size value > +* as part of odp_pktio_config() routine. > +* > +* Valid MTU value should be greater than 0 and less than or equal > to the > +* value get through odp_pktio_capability(), > +* i.e. 0 < mtu_size <= capability provided mtu value. > +*/ > + uint32_t mtu_size; > Do we really need MRU as well. + > } odp_pktio_config_t; > > /** > @@ -452,9 +475,6 @@ typedef union odp_pktio_set_op_t { > struct { > /** Promiscuous mode */ > uint32_t promisc_mode : 1; > - > - /** Allow app to set MTU size */ > - uint32_t mtu_set : 1; > } op; > /** All bits of the bit field structure. > * This field can be used to set/clear all flags, or bitwise > @@ -484,8 +504,6 @@ typedef struct odp_pktio_capability_t { > /** @deprecated Use enable_loop inside odp_pktin_config_t */ > odp_bool_t ODP_DEPRECATE(loop_supported); > > - /** Maximum MTU size supported */ > - uint32_t max_mtu_size; > } odp_pktio_capability_t; > > /** > @@ -916,21 +934,6 @@ 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. mtu value < 68 also results in failure. > - * > - * @param pktio Packet IO handle. > - * @param mtuMTU 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] pktioPacket IO handle. > -- > 1.9.3 > >
[lng-odp] api: pktio: pktio_if_ops for mtu_set and mac_set.
Hi, In the current ODP PKTIO APIs, there are calls to get mtu and mac information of the pktio interfaces. I did not find any APIs to configure the mtu and mac address of the pktio interface from the application. Could someone comment on the purpose of not having those routines along with mtu_get and mac_get api. OR are there any APIs to serve these purpose, am I missing those. *Regards,* *A Vamsi*
[lng-odp] [PATCH API-NEXT v1 1/1] api:pktio: add MAC address and MTU set functions.
Signed-off-by: Vamsi Attunuru <vattun...@cavium.com> Signed-off-by: Shally Verma <sve...@cavium.com> Signed-off-by: Mahipal Challa <mcha...@cavium.com> --- include/odp/api/spec/packet_io.h | 167 +++ 1 file changed, 167 insertions(+) diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index 8802089..7174c0f 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -451,6 +451,16 @@ typedef union odp_pktio_set_op_t { struct { /** Promiscuous mode */ uint32_t promisc_mode : 1; + /** Allow default MAC address to be set */ + uint32_t mac_addr_set : 1; + /** Allow multiple addresses to be added + * other than default. When enabled, app + * can call odp_mac_addr_add API to set + * mac addresses upto the limit indicated by + * Odp_pktio_capability_t:max_mac_addresses */ + uint32_t mac_addr_add : 1; + /** Allow app to set MTU size */ + uint32_t mtu_set : 1; } op; /** All bits of the bit field structure. * This field can be used to set/clear all flags, or bitwise @@ -459,6 +469,71 @@ typedef union odp_pktio_set_op_t { } odp_pktio_set_op_t; /** + * MAC address type + */ +typedef enum odp_mac_addr_type_t { + /** Unicast MAC address type */ + ODP_MAC_ADDR_TYPE_UCAST = 0, + + /** Multicast MAC address type */ + ODP_MAC_ADDR_TYPE_BCAST +} odp_mac_addr_type_t; + +/** + * MAC address add/remove operation status types + * + * These status types denote various statuses set by + * odp_pktio_mac_addr_add/remove APIs in odp_pktio_mac_addr_t:status. + */ +typedef enum odp_mac_ops_status_t { + /** MAC address add/remove is successful */ + ODP_MAC_ADDR_OP_SUCCESS = 0, + + /** Invalid mac address passed in odp_pktio_mac_addr_t:mac_addr */ + ODP_MAC_ADDR_INVALID, + + /** odp_pktio_mac_addr_t:mac_addr points to NULL */ + ODP_MAC_ADDR_PTR_NULL, + + /** Entry in mac_addr_tbl[] is NULL */ + ODP_MAC_ADDR_ENTRY_NULL, + + /** MAC address size mismatch +* odp_pktio_mac_addr_t:mac_addr_len +* != odp_pktio_capability_t:mac_addr_len */ + ODP_MAC_ADDR_SIZE_ERR, + + /** Index is invalid, +* odp_pktio_mac_addr_t:index >= odp_pktio_capability_t:max_mac_addresses */ + ODP_MAC_ADDR_INVALID_INDEX +} odp_mac_ops_status_t; + +/** + * Packet IO MAC address structure + * + * These parameters are used for adding/removing MAC addresses. + * "status" parameter of each index indicates the result after + * the odp_pktio_mac_addr_add/remove operation. + */ +typedef union odp_pktio_mac_addr_t { + /** Type of MAC address (ucast/mcast) */ + odp_mac_addr_type_t mac_type; + + /** Pointer to buffer containing MAC address */ + uint8_t *mac_addr; + + /** Length of mac_addr buffer */ + uint32_t mac_addr_len; + + /** Index value associated to this MAC address. +* Should be <= odp_pktio_capability_t:max_mac_addresses */ + uint32_t index; + + /** Status flag of the mac_addr_add/remove operation */ + odp_mac_ops_status_t status; +} odp_pktio_mac_addr_t; + +/** * Packet IO capabilities */ typedef struct odp_pktio_capability_t { @@ -482,6 +557,17 @@ 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 addresses supported on this specific interface +* All of the mac addresses supported by this pktio carry ,fixed size +* length as indicated by this capability param */ + uint32_t mac_addr_len; + + /** Maximum number of MAC addresses supported on this specific interface */ + uint32_t max_mac_addresses; } odp_pktio_capability_t; /** @@ -912,6 +998,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. mtu value == 0 also results in failure. + * + * @param pktio Packet IO handle. + * @param mtuMTU 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] pktioPacket IO handle. @@ -946,6 +1047,72 @@ int odp_pktio_promisc_mode(odp_pktio_t pktio); int odp_pktio_mac_addr(odp_pktio_t pktio, void *mac_addr, int
[lng-odp] [PATCH v1 1/1] pktio APIs to modify the MAC address or the MTU size of the given packet IO handler.
--- include/odp/api/spec/packet_io.h | 29 + 1 file changed, 29 insertions(+) diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index c7373fd..a950267 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -382,6 +382,10 @@ typedef union odp_pktio_set_op_t { struct { /** Promiscuous mode */ uint32_t promisc_mode : 1; + /** mac addr */ + uint32_t mac : 1; + /** mtu addr */ + uint32_t mtu : 1; } op; /** All bits of the bit field structure. * This field can be used to set/clear all flags, or bitwise @@ -413,6 +417,9 @@ 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; + + /* max mtu size supported */ + uint32_t max_mtu_size; } odp_pktio_capability_t; /** @@ -843,6 +850,16 @@ 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. + * + * @param[in] pktio Packet IO handle. + * + * @return 0 on success + * @retval -1 on failure + */ +int odp_pktio_mtu_set(odp_pktio_t pktio, int mtu); + +/** * Enable/Disable promiscuous mode on a packet IO interface. * * @param[in] pktioPacket IO handle. @@ -877,6 +894,18 @@ 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. + * + * @param pktio Packet IO handle + * @param[in] mac_addr Input buffer + * @param size Size of output buffer + * + * @return Number of bytes written (actual size of MAC address) + * @retval <0 on failure + */ +int odp_pktio_mac_addr_set(odp_pktio_t pktio, void *mac_addr, int size); + +/** * Setup per-port default class-of-service. * * @param[in] pktio Ingress port pktio handle. -- 1.9.3
[lng-odp] [API-NEXT PATCH v1 0/1] pktio APIs to set the MAC address and MTU size.
Hi Bill, Existing pktio API has only support of querying MAC and MTU values. Adds new pktio APIs to set MTU and MAC address on pktio interface. Implementation can indicate it's supported maximum MTU size and MAC address size in its pktio capabilities. User can call set APIs to set values within allowed range as indicated by pktio capabilities. Regards, Vamsi Vamsi Attunuru (1): pktio APIs to set the MAC address and MTU size of the given packet IO handler. include/odp/api/spec/packet_io.h | 45 1 file changed, 45 insertions(+) -- 1.9.3
[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 mtuMTU 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] pktioPacket 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 pktioPacket 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
[lng-odp] [PATCH API-NEXT v1 1/1] api:pktio: Adds MTU set function.
Signed-off-by: Vamsi Attunuru <vattun...@cavium.com> Signed-off-by: Shally Verma <sve...@cavium.com> Signed-off-by: Mahipal Challa <mcha...@cavium.com> --- include/odp/api/spec/packet_io.h | 21 + 1 file changed, 21 insertions(+) diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index d42cebf..be81c3d 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -452,6 +452,9 @@ typedef union odp_pktio_set_op_t { struct { /** Promiscuous mode */ uint32_t promisc_mode : 1; + + /** Allow app to set MTU size */ + uint32_t mtu_set : 1; } op; /** All bits of the bit field structure. * This field can be used to set/clear all flags, or bitwise @@ -480,6 +483,9 @@ typedef struct odp_pktio_capability_t { /** @deprecated Use enable_loop inside odp_pktin_config_t */ odp_bool_t ODP_DEPRECATE(loop_supported); + + /** Maximum MTU size supported */ + uint32_t max_mtu_size; } odp_pktio_capability_t; /** @@ -910,6 +916,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. mtu value < 68 also results in failure. + * + * @param pktio Packet IO handle. + * @param mtuMTU 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] pktioPacket IO handle. -- 1.9.3
[lng-odp] [PATCH API-NEXT v1 0/1] api:pktio: Adds MTU set function.
Existing pktio API has only support of querying MTU values. Adds new pktio API to set MTU on pktio interface. Implementation can indicate it's supported maximum MTU size in its pktio capabilities. User can call set API to set value within allowed range as indicated by pktio capabilities. As per the review comments on patch "[PATCH API-NEXT v1 1/1] api:pktio: add MAC address and MTU set functions." MTU set changes are separated out and versioned as v1. MAC address set changes will be the incremental patch on previous patches. Vamsi Attunuru (1): pktio API to set MTU size. include/odp/api/spec/packet_io.h | 21 + 1 file changed, 21 insertions(+) -- 1.9.3
[lng-odp] [PATCH API-NEXT v2 0/1] api:pktio: Adds MTU set function
As per the review comments on patch "[PATCH API-NEXT v1 1/1] api:pktio: Adds MTU set function." omitted odp_pktio_mtu_set() API that was defined for setting mtu size. With current patch, mtu set can be pursued as part of odp_pktio_config(). Vamsi Attunuru (1): Remove odp_pktio_mtu_set() API. Move mtu set changes to odp_pktio_config() API. include/odp/api/spec/packet_io.h | 43 +--- 1 file changed, 23 insertions(+), 20 deletions(-) -- 1.9.3
[lng-odp] [PATCH API-NEXT v2 1/1] api:pktio: Adds MTU set function.
Signed-off-by: Vamsi Attunuru <vattun...@cavium.com> Signed-off-by: Shally Verma <sve...@cavium.com> Signed-off-by: Mahipal Challa <mcha...@cavium.com> --- include/odp/api/spec/packet_io.h | 43 +--- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/include/odp/api/spec/packet_io.h b/include/odp/api/spec/packet_io.h index be81c3d..c372a2a 100644 --- a/include/odp/api/spec/packet_io.h +++ b/include/odp/api/spec/packet_io.h @@ -440,6 +440,29 @@ typedef struct odp_pktio_config_t { */ odp_bool_t outbound_ipsec; + /** MTU size of the pktio interface. +* +* It's the frame size which the pktio can transmit without fragmentation. +* And it does not count L2 header bytes, FCS and VLAN tag bytes. +* +* pktio interface must be able to send and receive packets up to +* this MTU size successfully. Trying to send or receive packets larger +* than these MTU results in undefined behavior. +* +* By default, pktio is configured with max support MTU size. +* +* Max supported MTU can be read through these parameter +* as part of odp_pktio_capability() routine. +* +* MTU can be modified by passing valid odp_pktio_config_t:mtu_size value +* as part of odp_pktio_config() routine. +* +* Valid MTU value should be greater than 0 and less than or equal to the +* value get through odp_pktio_capability(), +* i.e. 0 < mtu_size <= capability provided mtu value. +*/ + uint32_t mtu_size; + } odp_pktio_config_t; /** @@ -452,9 +475,6 @@ typedef union odp_pktio_set_op_t { struct { /** Promiscuous mode */ uint32_t promisc_mode : 1; - - /** Allow app to set MTU size */ - uint32_t mtu_set : 1; } op; /** All bits of the bit field structure. * This field can be used to set/clear all flags, or bitwise @@ -484,8 +504,6 @@ typedef struct odp_pktio_capability_t { /** @deprecated Use enable_loop inside odp_pktin_config_t */ odp_bool_t ODP_DEPRECATE(loop_supported); - /** Maximum MTU size supported */ - uint32_t max_mtu_size; } odp_pktio_capability_t; /** @@ -916,21 +934,6 @@ 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. mtu value < 68 also results in failure. - * - * @param pktio Packet IO handle. - * @param mtuMTU 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] pktioPacket IO handle. -- 1.9.3