Message ID | 1449757466-6287-9-git-send-email-maxim.uvarov@linaro.org |
---|---|
State | Superseded |
Headers | show |
linix-generic => linux-generic in subject Perhaps this can be corrected when merging? On 10 December 2015 at 15:24, Maxim Uvarov <maxim.uvarov@linaro.org> wrote: > For some pktios like loop and ipc functions like mtu, promisc, > and mac addr are not applicable. Instead of crash on deference > null pointer just return error if functions are not defined. > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> > --- > platform/linux-generic/odp_packet_io.c | 24 ++++++++++++++++-------- > 1 file changed, 16 insertions(+), 8 deletions(-) > > diff --git a/platform/linux-generic/odp_packet_io.c > b/platform/linux-generic/odp_packet_io.c > index 1e9d08c..c8b6502 100644 > --- a/platform/linux-generic/odp_packet_io.c > +++ b/platform/linux-generic/odp_packet_io.c > @@ -725,7 +725,7 @@ int pktin_poll(pktio_entry_t *entry) > int odp_pktio_mtu(odp_pktio_t id) > { > pktio_entry_t *entry; > - int ret; > + int ret = -1; > > entry = get_pktio_entry(id); > if (entry == NULL) { > @@ -740,7 +740,9 @@ int odp_pktio_mtu(odp_pktio_t id) > ODP_DBG("already freed pktio\n"); > return -1; > } > - ret = entry->s.ops->mtu_get(entry); > + > + if (entry->s.ops->mtu_get) > + ret = entry->s.ops->mtu_get(entry); > > unlock_entry(entry); > return ret; > @@ -749,7 +751,7 @@ int odp_pktio_mtu(odp_pktio_t id) > int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) > { > pktio_entry_t *entry; > - int ret; > + int ret = -1; > > entry = get_pktio_entry(id); > if (entry == NULL) { > @@ -769,7 +771,8 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, > odp_bool_t enable) > return -1; > } > > - ret = entry->s.ops->promisc_mode_set(entry, enable); > + if (entry->s.ops->promisc_mode_set) > + ret = entry->s.ops->promisc_mode_set(entry, enable); > > unlock_entry(entry); > return ret; > @@ -778,7 +781,7 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, > odp_bool_t enable) > int odp_pktio_promisc_mode(odp_pktio_t id) > { > pktio_entry_t *entry; > - int ret; > + int ret = -1; > > entry = get_pktio_entry(id); > if (entry == NULL) { > @@ -794,13 +797,13 @@ int odp_pktio_promisc_mode(odp_pktio_t id) > return -1; > } > > - ret = entry->s.ops->promisc_mode_get(entry); > + if (entry->s.ops->promisc_mode_get) > + ret = entry->s.ops->promisc_mode_get(entry); > unlock_entry(entry); > > return ret; > } > > - > int odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr, int addr_size) > { > pktio_entry_t *entry; > @@ -825,7 +828,12 @@ int odp_pktio_mac_addr(odp_pktio_t id, void > *mac_addr, int addr_size) > return -1; > } > > - ret = entry->s.ops->mac_get(entry, mac_addr); > + if (entry->s.ops->mac_get) { > + ret = entry->s.ops->mac_get(entry, mac_addr); > + } else { > + ODP_DBG("pktio does not support mac addr get\n"); > + ret = -1; > + } > unlock_entry(entry); > > return ret; > -- > 1.9.1 > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp >
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 1e9d08c..c8b6502 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -725,7 +725,7 @@ int pktin_poll(pktio_entry_t *entry) int odp_pktio_mtu(odp_pktio_t id) { pktio_entry_t *entry; - int ret; + int ret = -1; entry = get_pktio_entry(id); if (entry == NULL) { @@ -740,7 +740,9 @@ int odp_pktio_mtu(odp_pktio_t id) ODP_DBG("already freed pktio\n"); return -1; } - ret = entry->s.ops->mtu_get(entry); + + if (entry->s.ops->mtu_get) + ret = entry->s.ops->mtu_get(entry); unlock_entry(entry); return ret; @@ -749,7 +751,7 @@ int odp_pktio_mtu(odp_pktio_t id) int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) { pktio_entry_t *entry; - int ret; + int ret = -1; entry = get_pktio_entry(id); if (entry == NULL) { @@ -769,7 +771,8 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) return -1; } - ret = entry->s.ops->promisc_mode_set(entry, enable); + if (entry->s.ops->promisc_mode_set) + ret = entry->s.ops->promisc_mode_set(entry, enable); unlock_entry(entry); return ret; @@ -778,7 +781,7 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) int odp_pktio_promisc_mode(odp_pktio_t id) { pktio_entry_t *entry; - int ret; + int ret = -1; entry = get_pktio_entry(id); if (entry == NULL) { @@ -794,13 +797,13 @@ int odp_pktio_promisc_mode(odp_pktio_t id) return -1; } - ret = entry->s.ops->promisc_mode_get(entry); + if (entry->s.ops->promisc_mode_get) + ret = entry->s.ops->promisc_mode_get(entry); unlock_entry(entry); return ret; } - int odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr, int addr_size) { pktio_entry_t *entry; @@ -825,7 +828,12 @@ int odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr, int addr_size) return -1; } - ret = entry->s.ops->mac_get(entry, mac_addr); + if (entry->s.ops->mac_get) { + ret = entry->s.ops->mac_get(entry, mac_addr); + } else { + ODP_DBG("pktio does not support mac addr get\n"); + ret = -1; + } unlock_entry(entry); return ret;
For some pktios like loop and ipc functions like mtu, promisc, and mac addr are not applicable. Instead of crash on deference null pointer just return error if functions are not defined. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- platform/linux-generic/odp_packet_io.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)