Lines Matching refs:rule

964 	struct igc_nfc_rule *rule = NULL;
970 rule = igc_get_nfc_rule(adapter, fsp->location);
971 if (!rule)
975 fsp->ring_cookie = rule->action;
977 if (rule->filter.match_flags & IGC_FILTER_FLAG_ETHER_TYPE) {
978 fsp->h_u.ether_spec.h_proto = htons(rule->filter.etype);
982 if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_ETYPE) {
984 fsp->h_ext.vlan_etype = htons(rule->filter.vlan_etype);
988 if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_TCI) {
990 fsp->h_ext.vlan_tci = htons(rule->filter.vlan_tci);
991 fsp->m_ext.vlan_tci = htons(rule->filter.vlan_tci_mask);
994 if (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR) {
996 rule->filter.dst_addr);
1000 if (rule->filter.match_flags & IGC_FILTER_FLAG_SRC_MAC_ADDR) {
1002 rule->filter.src_addr);
1006 if (rule->filter.match_flags & IGC_FILTER_FLAG_USER_DATA) {
1008 memcpy(fsp->h_ext.data, rule->filter.user_data, sizeof(fsp->h_ext.data));
1009 memcpy(fsp->m_ext.data, rule->filter.user_mask, sizeof(fsp->m_ext.data));
1024 struct igc_nfc_rule *rule;
1031 list_for_each_entry(rule, &adapter->nfc_rule_list, list) {
1036 rule_locs[cnt] = rule->location;
1216 static void igc_ethtool_init_nfc_rule(struct igc_nfc_rule *rule,
1219 INIT_LIST_HEAD(&rule->list);
1221 rule->action = fsp->ring_cookie;
1222 rule->location = fsp->location;
1225 rule->filter.vlan_tci = ntohs(fsp->h_ext.vlan_tci);
1226 rule->filter.vlan_tci_mask = ntohs(fsp->m_ext.vlan_tci);
1227 rule->filter.match_flags |= IGC_FILTER_FLAG_VLAN_TCI;
1231 rule->filter.etype = ntohs(fsp->h_u.ether_spec.h_proto);
1232 rule->filter.match_flags = IGC_FILTER_FLAG_ETHER_TYPE;
1239 rule->filter.match_flags |= IGC_FILTER_FLAG_SRC_MAC_ADDR;
1240 ether_addr_copy(rule->filter.src_addr,
1245 rule->filter.match_flags |= IGC_FILTER_FLAG_DST_MAC_ADDR;
1246 ether_addr_copy(rule->filter.dst_addr,
1252 rule->filter.vlan_etype = ntohs(fsp->h_ext.vlan_etype);
1253 rule->filter.match_flags |= IGC_FILTER_FLAG_VLAN_ETYPE;
1259 rule->filter.match_flags |= IGC_FILTER_FLAG_USER_DATA;
1260 memcpy(rule->filter.user_data, fsp->h_ext.data, sizeof(fsp->h_ext.data));
1261 memcpy(rule->filter.user_mask, fsp->m_ext.data, sizeof(fsp->m_ext.data));
1273 if ((rule->filter.match_flags & IGC_FILTER_FLAG_USER_DATA) ||
1274 (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_ETYPE) ||
1275 ((rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_TCI) &&
1276 rule->filter.vlan_tci_mask == ntohs(VLAN_TCI_FULL_MASK)) ||
1277 (rule->filter.match_flags & (rule->filter.match_flags - 1)))
1278 rule->flex = true;
1280 rule->flex = false;
1284 * igc_ethtool_check_nfc_rule() - Check if NFC rule is valid
1286 * @rule: Rule under evaluation
1289 * one bit in filter flags is set, @rule is considered invalid.
1291 * Also, if there is already another rule with the same filter in a different
1292 * location, @rule is considered invalid.
1299 struct igc_nfc_rule *rule)
1302 u8 flags = rule->filter.match_flags;
1311 if (!memcmp(&rule->filter, &tmp->filter,
1312 sizeof(rule->filter)) &&
1313 tmp->location != rule->location) {
1328 struct igc_nfc_rule *rule, *old_rule;
1371 rule = kzalloc(sizeof(*rule), GFP_KERNEL);
1372 if (!rule)
1375 igc_ethtool_init_nfc_rule(rule, fsp);
1379 err = igc_ethtool_check_nfc_rule(adapter, rule);
1387 err = igc_add_nfc_rule(adapter, rule);
1396 kfree(rule);
1405 struct igc_nfc_rule *rule;
1409 rule = igc_get_nfc_rule(adapter, fsp->location);
1410 if (!rule) {
1415 igc_del_nfc_rule(adapter, rule);