/** * nm_setting_vlan_add_priority_str * @setting: the #NMSettingVlan * @map: the type of priority map * @str: the string which contains a priority map, like "3:7" * * Adds a priority map entry into either the #NMSettingVlan:ingress_priority_map * or the #NMSettingVlan:egress_priority_map properties. The priority map maps * the Linux SKB priorities to 802.1p priorities. * * Returns: TRUE if the entry was successfully added to the list, or it * overwrote the old value, FALSE if error */ gboolean nm_setting_vlan_add_priority_str (NMSettingVlan *setting, NMVlanPriorityMap map, const char *str) { NMSettingVlanPrivate *priv = NULL; GSList *list = NULL, *iter = NULL; PriorityMap *item = NULL; g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), FALSE); g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE); g_return_val_if_fail (str && str[0], FALSE); priv = NM_SETTING_VLAN_GET_PRIVATE (setting); list = get_map (setting, map); item = priority_map_new_from_str (map, str); g_return_val_if_fail (item != NULL, FALSE); /* Duplicates get replaced */ for (iter = list; iter; iter = g_slist_next (iter)) { PriorityMap *p = iter->data; if (p->from == item->from) { p->to = item->to; g_free (item); return TRUE; } } set_map (setting, map, g_slist_append (list, item)); return TRUE; }
/** * nm_setting_vlan_add_priority_str: * @setting: the #NMSettingVlan * @map: the type of priority map * @str: the string which contains a priority map, like "3:7" * * Adds a priority map entry into either the #NMSettingVlan:ingress_priority_map * or the #NMSettingVlan:egress_priority_map properties. The priority map maps * the Linux SKB priorities to 802.1p priorities. * * Returns: %TRUE if the entry was successfully added to the list, or it * overwrote the old value, %FALSE if error */ gboolean nm_setting_vlan_add_priority_str (NMSettingVlan *setting, NMVlanPriorityMap map, const char *str) { GSList *list = NULL; NMVlanQosMapping *item = NULL; g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), FALSE); g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE); g_return_val_if_fail (str && str[0], FALSE); list = get_map (setting, map); item = priority_map_new_from_str (map, str); if (!item) g_return_val_if_reached (FALSE); /* Duplicates get replaced */ if (check_replace_duplicate_priority (list, item->from, item->to)) { g_free (item); if (map == NM_VLAN_INGRESS_MAP) g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP); else g_object_notify (G_OBJECT (setting), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP); return TRUE; } set_map (setting, map, g_slist_insert_sorted (list, item, prio_map_compare)); return TRUE; }
static GSList * priority_stringlist_to_maplist (NMVlanPriorityMap map, GSList *strlist) { GSList *list = NULL, *iter; for (iter = strlist; iter; iter = g_slist_next (iter)) { PriorityMap *item; item = priority_map_new_from_str (map, (const char *) iter->data); if (item) list = g_slist_prepend (list, item); } return g_slist_reverse (list); }
static GSList * priority_strv_to_maplist (NMVlanPriorityMap map, char **strv) { GSList *list = NULL; int i; for (i = 0; strv && strv[i]; i++) { NMVlanQosMapping *item; item = priority_map_new_from_str (map, strv[i]); if (item) { if (!check_replace_duplicate_priority (list, item->from, item->to)) list = g_slist_prepend (list, item); } } return g_slist_sort (list, prio_map_compare); }
/** * nm_setting_vlan_remove_priority_str_by_value: * @setting: the #NMSettingVlan * @map: the type of priority map * @str: the string which contains a priority map, like "3:7" * * Removes the priority map @str from the #NMSettingVlan:ingress_priority_map * or #NMSettingVlan:egress_priority_map (according to @map argument) * properties. * * Returns: %TRUE if the priority mapping was found and removed; %FALSE if it was not. */ gboolean nm_setting_vlan_remove_priority_str_by_value (NMSettingVlan *setting, NMVlanPriorityMap map, const char *str) { NMVlanQosMapping *item; gboolean found; g_return_val_if_fail (NM_IS_SETTING_VLAN (setting), FALSE); g_return_val_if_fail (map == NM_VLAN_INGRESS_MAP || map == NM_VLAN_EGRESS_MAP, FALSE); item = priority_map_new_from_str (map, str); if (!item) return FALSE; found = nm_setting_vlan_remove_priority_by_value (setting, map, item->from, item->to); g_free (item); return found; }