qosmngr: enhance support plus fix some bugs

- Enhance support to cover ipv6 rules
- Add support to differentiate between l2 and l3 rules
- Resolve bug related to source interface for output chain
This commit is contained in:
Rahul 2020-05-29 18:02:09 +05:30
parent 4652ec7399
commit 5e41b8c3bc

View file

@ -116,27 +116,52 @@ broute_append_rule() {
handle_ebtables_rules() {
sid=$1
local is_l2_rule=0
init_broute_rule
config_get src_if "$sid" "ifname"
config_get src_mac "$sid" "src_mac"
config_get dst_mac "$sid" "dst_mac"
config_get pcp_check "$sid" "pcp_check"
config_get eth_type "$sid" "ethertype"
config_get vid "$sid" "vid_check"
config_get traffic_class "$sid" "traffic_class"
if [ -n "$src_if" ]; then
src_if="$src_if+"
broute_filter_on_src_if $src_if
fi
config_get src_mac "$sid" "src_mac"
[ -n "$src_mac" ] && broute_filter_on_src_mac $src_mac
config_get dst_mac "$sid" "dst_mac"
[ -n "$dst_mac" ] && broute_filter_on_dst_mac $dst_mac
config_get pcp_check "$sid" "pcp_check"
[ -n "$pcp_check" ] && broute_filter_on_pcp $pcp_check
config_get eth_type "$sid" "ethertype"
[ -n "$eth_type" ] && broute_filter_on_ether_type $eth_type
config_get vid "$sid" "vid_check"
[ -n "$vid" ] && broute_filter_on_vid $vid
if [ -n "$src_mac" ]; then
broute_filter_on_src_mac $src_mac
is_l2_rule=1
fi
if [ -n "$dst_mac" ]; then
broute_filter_on_dst_mac $dst_mac
is_l2_rule=1
fi
if [ -n "$pcp_check" ]; then
broute_filter_on_pcp $pcp_check
is_l2_rule=1
fi
if [ -n "$eth_type" ]; then
broute_filter_on_ether_type $eth_type
is_l2_rule=1
fi
if [ -n "$vid" ]; then
broute_filter_on_vid $vid
is_l2_rule=1
fi
if [ $is_l2_rule -eq 0 ]; then
return
fi
config_get traffic_class "$sid" "traffic_class"
[ -n "$traffic_class" ] && broute_rule_set_traffic_class $traffic_class
[ -n "$BR_RULE" ] && broute_append_rule
@ -215,7 +240,8 @@ append_rule_to_mangle_table() {
handle_iptables_rules() {
cid=$1
ipv=0
local ip_version=0
local is_l3_rule=0
init_iptables_rule
config_get proto "$cid" "proto"
@ -237,55 +263,96 @@ handle_iptables_rules() {
#check version of ip
case $src_ip$dest_ip in
*.*)
ipv=4
ip_version=4
;;
*:*)
ipv=6
ip_version=6
;;
*)
ipv=1 #ip address not used
ip_version=1 #ip address not used
esac
#filter interface
if [ ${ifname:0:2} == "br" ]; then
iptables_filter_intf $ifname
if [ -n "$ifname" ]; then
if [ "$ifname" != "lo" ]; then
iptables_filter_intf $ifname
fi
fi
# filter proto
[ -n "$proto" ] && iptables_filter_proto $proto
if [ -n "$proto" ]; then
iptables_filter_proto $proto
is_l3_rule=1
fi
#filter src. ip
[ -n "$src_ip" ] && iptables_filter_ip_src $src_ip
if [ -n "$src_ip" ]; then
iptables_filter_ip_src $src_ip
is_l3_rule=1
fi
if [ -n "$src_mask" ]; then
iptables_filter_ip_mask $src_mask
is_l3_rule=1
fi
#filter dest. ip
[ -n "$dest_ip" ] && iptables_filter_ip_dest $dest_ip
#filter src. ip mask
[ -n "$src_mask" ] && iptables_filter_ip_mask $src_mask
if [ -n "$dest_ip" ]; then
iptables_filter_ip_dest $dest_ip
is_l3_rule=1
fi
#filter dest. ip mask
[ -n "$dest_mask" ] && iptables_filter_ip_mask $dest_mask
if [ -n "$dest_mask" ]; then
iptables_filter_ip_mask $dest_mask
is_l3_rule=1
fi
#filter dest. port
[ -n "$dest_port" -a -z "$dest_port_range" ] && iptables_filter_port_dest $dest_port
if [ -n "$dest_port" -a -z "$dest_port_range" ]; then
iptables_filter_port_dest $dest_port
is_l3_rule=1
fi
#filter src. port
[ -n "$src_port" -a -z "$src_port_range" ] && iptables_filter_port_src $src_port
if [ -n "$src_port" -a -z "$src_port_range" ]; then
iptables_filter_port_src $src_port
is_l3_rule=1
fi
#filter dest. port range
[ -n "$dest_port" -a -n "$dest_port_range" ] && iptables_filter_port_dest_range $dest_port $dest_port_range
if [ -n "$dest_port" -a -n "$dest_port_range" ]; then
iptables_filter_port_dest_range $dest_port $dest_port_range
is_l3_rule=1
fi
#filter src. port range
[ -n "$src_port" -a -n "$src_port_range" ] && iptables_filter_port_src_range $src_port $src_port_range
if [ -n "$src_port" -a -n "$src_port_range" ]; then
iptables_filter_port_src_range $src_port $src_port_range
is_l3_rule=1
fi
#filter dscp
[ -n "$dscp_filter" ] && iptables_filter_dscp_filter $dscp_filter
if [ -n "$dscp_filter" ]; then
iptables_filter_dscp_filter $dscp_filter
is_l3_rule=1
fi
#filter min. IP packet len.
[ -n "$ip_len_min" ] && iptables_filter_ip_len_min $ip_len_min
if [ -n "$ip_len_min" ]; then
iptables_filter_ip_len_min $ip_len_min
is_l3_rule=1
fi
#filter max. IP packet len.
[ -n "$ip_len_max" ] && iptables_filter_ip_len_max $ip_len_max
if [ -n "$ip_len_max" ]; then
iptables_filter_ip_len_max $ip_len_max
is_l3_rule=1
fi
if [ $is_l3_rule -eq 0 ]; then
return
fi
#set dscp mark
[ -n "$dscp_mark" ] && iptables_set_dscp_mark $dscp_mark
@ -294,15 +361,15 @@ handle_iptables_rules() {
[ -n "$traffic_class" ] && iptables_set_traffic_class $traffic_class
#write iptables rule for dscp marking
[ -n "$IP_RULE" -a -n "$dscp_mark" ] && append_rule_to_mangle_table "FORWARD" $ipv
[ -n "$IP_RULE" -a -n "$dscp_mark" ] && append_rule_to_mangle_table "FORWARD" $ip_version
if [ -n "$IP_RULE" -a -n "$traffic_class" ]; then
if [ ${ifname:0:2} == "lo" ]; then
if [ "$ifname" == "lo" ]; then
#write iptables rule for putting WAN directed internal packets in different queue
append_rule_to_mangle_table "OUTPUT" $ipv
append_rule_to_mangle_table "OUTPUT" $ip_version
else
#write iptables rule for putting WAN directed LAN packets in different queue
append_rule_to_mangle_table "PREROUTING" $ipv
append_rule_to_mangle_table "PREROUTING" $ip_version
fi
fi
}