lkml.org 
[lkml]   [2023]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next v2 4/6] net: dcb: add helper functions to retrieve PCP and DSCP rewrite maps
    Date
    Add two new helper functions to retrieve a mapping of priority to PCP
    and DSCP bitmasks, where each bitmap contains ones in positions that
    match a rewrite entry.

    dcb_ieee_getrewr_prio_dscp_mask_map() reuses the dcb_ieee_app_prio_map,
    as this struct is already used for a similar mapping in the app table.

    Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
    ---
    include/net/dcbnl.h | 10 +++++++++
    net/dcb/dcbnl.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 62 insertions(+)

    diff --git a/include/net/dcbnl.h b/include/net/dcbnl.h
    index fe7dfb8bcb5b..42207fc44660 100644
    --- a/include/net/dcbnl.h
    +++ b/include/net/dcbnl.h
    @@ -29,12 +29,22 @@ int dcb_ieee_setapp(struct net_device *, struct dcb_app *);
    int dcb_ieee_delapp(struct net_device *, struct dcb_app *);
    u8 dcb_ieee_getapp_mask(struct net_device *, struct dcb_app *);

    +struct dcb_rewr_prio_pcp_map {
    + u16 map[IEEE_8021QAZ_MAX_TCS];
    +};
    +
    +void dcb_getrewr_prio_pcp_mask_map(const struct net_device *dev,
    + struct dcb_rewr_prio_pcp_map *p_map);
    +
    struct dcb_ieee_app_prio_map {
    u64 map[IEEE_8021QAZ_MAX_TCS];
    };
    void dcb_ieee_getapp_prio_dscp_mask_map(const struct net_device *dev,
    struct dcb_ieee_app_prio_map *p_map);

    +void dcb_getrewr_prio_dscp_mask_map(const struct net_device *dev,
    + struct dcb_ieee_app_prio_map *p_map);
    +
    struct dcb_ieee_app_dscp_map {
    u8 map[64];
    };
    diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
    index 54af3ee03491..fc1389794467 100644
    --- a/net/dcb/dcbnl.c
    +++ b/net/dcb/dcbnl.c
    @@ -2231,6 +2231,58 @@ int dcb_ieee_delapp(struct net_device *dev, struct dcb_app *del)
    }
    EXPORT_SYMBOL(dcb_ieee_delapp);

    +/* dcb_getrewr_prio_pcp_mask_map - For a given device, find mapping from
    + * priorities to the PCP and DEI values assigned to that priority.
    + */
    +void dcb_getrewr_prio_pcp_mask_map(const struct net_device *dev,
    + struct dcb_rewr_prio_pcp_map *p_map)
    +{
    + int ifindex = dev->ifindex;
    + struct dcb_app_type *itr;
    + u8 prio;
    +
    + memset(p_map->map, 0, sizeof(p_map->map));
    +
    + spin_lock_bh(&dcb_lock);
    + list_for_each_entry(itr, &dcb_rewr_list, list) {
    + if (itr->ifindex == ifindex &&
    + itr->app.selector == DCB_APP_SEL_PCP &&
    + itr->app.protocol < 16 &&
    + itr->app.priority < IEEE_8021QAZ_MAX_TCS) {
    + prio = itr->app.priority;
    + p_map->map[prio] |= 1 << itr->app.protocol;
    + }
    + }
    + spin_unlock_bh(&dcb_lock);
    +}
    +EXPORT_SYMBOL(dcb_getrewr_prio_pcp_mask_map);
    +
    +/* dcb_getrewr_prio_dscp_mask_map - For a given device, find mapping from
    + * priorities to the DSCP values assigned to that priority.
    + */
    +void dcb_getrewr_prio_dscp_mask_map(const struct net_device *dev,
    + struct dcb_ieee_app_prio_map *p_map)
    +{
    + int ifindex = dev->ifindex;
    + struct dcb_app_type *itr;
    + u8 prio;
    +
    + memset(p_map->map, 0, sizeof(p_map->map));
    +
    + spin_lock_bh(&dcb_lock);
    + list_for_each_entry(itr, &dcb_rewr_list, list) {
    + if (itr->ifindex == ifindex &&
    + itr->app.selector == IEEE_8021QAZ_APP_SEL_DSCP &&
    + itr->app.protocol < 64 &&
    + itr->app.priority < IEEE_8021QAZ_MAX_TCS) {
    + prio = itr->app.priority;
    + p_map->map[prio] |= 1ULL << itr->app.protocol;
    + }
    + }
    + spin_unlock_bh(&dcb_lock);
    +}
    +EXPORT_SYMBOL(dcb_getrewr_prio_dscp_mask_map);
    +
    /*
    * dcb_ieee_getapp_prio_dscp_mask_map - For a given device, find mapping from
    * priorities to the DSCP values assigned to that priority. Initialize p_map
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-03-26 23:43    [W:2.338 / U:0.364 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site