mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-19 17:28:35 +02:00
Initial implementation of nested classes
This commit is contained in:
parent
d3cd3ea26c
commit
03cd8350dc
@ -564,9 +564,10 @@ sub validate_tc_class( $$$$$$ ) {
|
|||||||
my $devref;
|
my $devref;
|
||||||
my $device = $devclass;
|
my $device = $devclass;
|
||||||
my $occurs = 1;
|
my $occurs = 1;
|
||||||
|
my $parentclass = 1;
|
||||||
|
|
||||||
if ( $devclass =~ /:/ ) {
|
if ( $devclass =~ /:/ ) {
|
||||||
( $device, my ($number, $rest ) ) = split /:/, $device, 3;
|
( $device, my ($number, $subnumber, $rest ) ) = split /:/, $device, 4;
|
||||||
fatal_error "Invalid INTERFACE:CLASS ($devclass)" if defined $rest;
|
fatal_error "Invalid INTERFACE:CLASS ($devclass)" if defined $rest;
|
||||||
|
|
||||||
if ( $device =~ /^(\d+|0x[\da-fA-F]+)$/ ) {
|
if ( $device =~ /^(\d+|0x[\da-fA-F]+)$/ ) {
|
||||||
@ -579,6 +580,12 @@ sub validate_tc_class( $$$$$$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( defined $number ) {
|
if ( defined $number ) {
|
||||||
|
if ( defined $subnumber ) {
|
||||||
|
fatal_error "Invalid interface/class number ($devclass)" unless defined $classnumber && $classnumber;
|
||||||
|
$parentclass = $classnumber;
|
||||||
|
$classnumber = hex_value $subnumber;
|
||||||
|
}
|
||||||
|
|
||||||
fatal_error "Invalid interface/class number ($devclass)" unless defined $classnumber && $classnumber;
|
fatal_error "Invalid interface/class number ($devclass)" unless defined $classnumber && $classnumber;
|
||||||
fatal_error "Duplicate interface/class number ($devclass)" if defined $devnums[ $classnumber ];
|
fatal_error "Duplicate interface/class number ($devclass)" if defined $devnums[ $classnumber ];
|
||||||
} else {
|
} else {
|
||||||
@ -603,13 +610,26 @@ sub validate_tc_class( $$$$$$ ) {
|
|||||||
|
|
||||||
$markval = numeric_value( $mark );
|
$markval = numeric_value( $mark );
|
||||||
fatal_error "Invalid MARK ($markval)" unless defined $markval;
|
fatal_error "Invalid MARK ($markval)" unless defined $markval;
|
||||||
$classnumber = $config{WIDE_TC_MARKS} ? $markval < 0x100 ? 0x4000 | $markval : $markval : $devnum . $markval;
|
|
||||||
fatal_error "Duplicate MARK ($mark)" if $tcref->{$classnumber};
|
if ( $classnumber ) {
|
||||||
|
fatal_error "Duplicate Class NUMBER ($classnumber)" if $tcref->{$classnumber};
|
||||||
|
} else {
|
||||||
|
$classnumber = $config{WIDE_TC_MARKS} ? $markval < 0x100 ? 0x4000 | $markval : $markval : $devnum . $markval;
|
||||||
|
fatal_error "Duplicate MARK ($mark)" if $tcref->{$classnumber};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fatal_error "Duplicate Class NUMBER ($classnumber)" if $tcref->{$classnumber};
|
fatal_error "Duplicate Class NUMBER ($classnumber)" if $tcref->{$classnumber};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $parrentclass != 1 ) {
|
||||||
|
#
|
||||||
|
# Nested Class
|
||||||
|
#
|
||||||
|
my $parentref = $tcref->{parentclass};
|
||||||
|
fatal_error "Unknown Parent class ($parentclass)" unless $parentref && $parentref->{occurs} == 1;
|
||||||
|
}
|
||||||
|
|
||||||
$tcref->{$classnumber} = { tos => [] ,
|
$tcref->{$classnumber} = { tos => [] ,
|
||||||
rate => convert_rate( $full, $rate, 'RATE' ) ,
|
rate => convert_rate( $full, $rate, 'RATE' ) ,
|
||||||
ceiling => convert_rate( $full, $ceil, 'CEIL' ) ,
|
ceiling => convert_rate( $full, $ceil, 'CEIL' ) ,
|
||||||
@ -619,6 +639,7 @@ sub validate_tc_class( $$$$$$ ) {
|
|||||||
pfifo => 0,
|
pfifo => 0,
|
||||||
occurs => 1,
|
occurs => 1,
|
||||||
src => 1,
|
src => 1,
|
||||||
|
parent => $parentclass,
|
||||||
};
|
};
|
||||||
|
|
||||||
$tcref = $tcref->{$classnumber};
|
$tcref = $tcref->{$classnumber};
|
||||||
@ -694,6 +715,7 @@ sub validate_tc_class( $$$$$$ ) {
|
|||||||
flow => $tcref->{flow} ,
|
flow => $tcref->{flow} ,
|
||||||
pfifo => $tcref->{pfifo},
|
pfifo => $tcref->{pfifo},
|
||||||
occurs => 0,
|
occurs => 0,
|
||||||
|
parent => $parentclass,
|
||||||
};
|
};
|
||||||
push @tcclasses, "$device:$classnumber";
|
push @tcclasses, "$device:$classnumber";
|
||||||
};
|
};
|
||||||
@ -997,7 +1019,7 @@ sub setup_traffic_shaping() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit ( "[ \$${dev}_mtu -gt $quantum ] && quantum=\$${dev}_mtu || quantum=$quantum",
|
emit ( "[ \$${dev}_mtu -gt $quantum ] && quantum=\$${dev}_mtu || quantum=$quantum",
|
||||||
"run_tc class add dev $device parent $devref->{number}:1 classid $classid htb rate $rate ceil $tcref->{ceiling}kbit prio $tcref->{priority} \$${dev}_mtu1 quantum \$quantum" );
|
"run_tc class add dev $device parent $devref->{number}:$tcref->{parent} classid $classid htb rate $rate ceil $tcref->{ceiling}kbit prio $tcref->{priority} \$${dev}_mtu1 quantum \$quantum" );
|
||||||
|
|
||||||
emit( "run_tc qdisc add dev $device parent $classid handle ${classnum}: sfq quantum \$quantum limit 127 perturb 10" ) unless $tcref->{pfifo};
|
emit( "run_tc qdisc add dev $device parent $classid handle ${classnum}: sfq quantum \$quantum limit 127 perturb 10" ) unless $tcref->{pfifo};
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user