| /* |
| * |
| * (C) 2011-13 - ntop.org |
| * |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU Lessed General Public License as published by |
| * the Free Software Foundation; either version 3 of the License, or |
| * (at your option) any later version. |
| * |
| * |
| */ |
| |
| /* ********************************* */ |
| |
| int i82599_add_hash_filtering_rule(pfring *ring, hash_filtering_rule* rule_to_add) { |
| hw_filtering_rule rule; |
| memset(&rule, 0, sizeof(rule)); |
| |
| //if(ring->ft_device_type != intel_82599_family |
| //&& ring->dna_dev.mem_info.device_model != intel_ixgbe_82599) |
| // return -4; |
| |
| switch(rule_to_add->rule_action) { |
| case forward_packet_and_stop_rule_evaluation: |
| case forward_packet_add_rule_and_stop_rule_evaluation: |
| return 0; /* Nothing to do */ |
| |
| case dont_forward_packet_and_stop_rule_evaluation: |
| break; /* Ok - DROP */ |
| |
| case reflect_packet_and_stop_rule_evaluation: |
| case reflect_packet_and_continue_rule_evaluation: |
| case bounce_packet_and_stop_rule_evaluation: |
| case bounce_packet_and_continue_rule_evaluation: |
| case execute_action_and_continue_rule_evaluation: |
| case execute_action_and_stop_rule_evaluation: |
| default: |
| return -3; /* Not supported */ |
| } |
| |
| rule.rule_id = rule_to_add->rule_id; |
| rule.rule_family_type = intel_82599_perfect_filter_rule; |
| rule.rule_family.perfect_rule.vlan_id = rule_to_add->vlan_id; |
| rule.rule_family.perfect_rule.proto = rule_to_add->proto; |
| rule.rule_family.perfect_rule.s_addr = rule_to_add->host_peer_a.v4; |
| rule.rule_family.perfect_rule.d_addr = rule_to_add->host_peer_b.v4; |
| rule.rule_family.perfect_rule.s_port = rule_to_add->port_peer_a; |
| rule.rule_family.perfect_rule.d_port = rule_to_add->port_peer_b; |
| rule.rule_family.perfect_rule.queue_id = -1; |
| |
| return virtual_filtering_device_add_hw_rule(ring, &rule); |
| } |
| |
| /* ********************************* */ |
| |
| int i82599_add_filtering_rule(pfring *ring, filtering_rule* rule_to_add) { |
| hw_filtering_rule rule; |
| memset(&rule, 0, sizeof(rule)); |
| |
| //if(ring->ft_device_type != intel_82599_family |
| //&& ring->dna_dev.mem_info.device_model != intel_ixgbe_82599) |
| // return -4; |
| |
| switch(rule_to_add->rule_action) { |
| case forward_packet_and_stop_rule_evaluation: |
| case forward_packet_add_rule_and_stop_rule_evaluation: |
| return 0; /* Nothing to do */ |
| |
| case dont_forward_packet_and_stop_rule_evaluation: |
| break; /* Ok - DROP */ |
| |
| case reflect_packet_and_stop_rule_evaluation: |
| case reflect_packet_and_continue_rule_evaluation: |
| case bounce_packet_and_stop_rule_evaluation: |
| case bounce_packet_and_continue_rule_evaluation: |
| case execute_action_and_continue_rule_evaluation: |
| case execute_action_and_stop_rule_evaluation: |
| default: |
| return -3; /* Not supported */ |
| } |
| |
| //rule_to_add->balance_id |
| //rule_to_add->balance_pool |
| //rule_to_add->core_fields.shost_mask.v4 (/32 only) |
| //rule_to_add->core_fields.dhost_mask.v4 (/32 only) |
| //rule_to_add->core_fields.sport_high (no range) |
| //rule_to_add->core_fields.dport_high (no range) |
| //rule_to_add->core_fields.vlan_id (no VLAN) |
| |
| rule.rule_id = rule_to_add->rule_id; |
| rule.rule_family_type = intel_82599_five_tuple_rule; |
| rule.rule_family.five_tuple_rule.proto = rule_to_add->core_fields.proto; |
| rule.rule_family.five_tuple_rule.s_addr = rule_to_add->core_fields.shost.v4; |
| rule.rule_family.five_tuple_rule.d_addr = rule_to_add->core_fields.dhost.v4; |
| rule.rule_family.five_tuple_rule.s_port = rule_to_add->core_fields.sport_low; |
| rule.rule_family.five_tuple_rule.d_port = rule_to_add->core_fields.dport_low; |
| rule.rule_family.five_tuple_rule.queue_id = -1; |
| |
| return virtual_filtering_device_add_hw_rule(ring, &rule); |
| } |
| |
| /* ********************************* */ |
| |
| int i82599_remove_filtering_rule(pfring *ring, u_int16_t rule_id) { |
| return virtual_filtering_device_remove_hw_rule(ring, rule_id); |
| } |
| |