From 62f480897e2476c3125c1c839a3e42a14f8d2596 Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Sun, 14 Dec 2014 09:13:41 -0800 Subject: [PATCH] Improve handling of mark ranges Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Tc.pm | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Tc.pm b/Shorewall/Perl/Shorewall/Tc.pm index 0cbde42fb..666e3b62f 100644 --- a/Shorewall/Perl/Shorewall/Tc.pm +++ b/Shorewall/Perl/Shorewall/Tc.pm @@ -231,6 +231,12 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$ ) { my ( $option, $marktype ) = @_; my $and_or = $params =~ s/^([|&])// ? $1 : ''; + if ( $option ) { + $target = join( ' ', $target, $option ); + } else { + $target = join( ' ', $target, $and_or eq '|' ? '--or-mark' : $and_or ? '--and-mark' : '--set-mark' ); + } + if ( $params =~ /-/ ) { # # A Mark Range @@ -260,8 +266,6 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$ ) { $chain ||= $designator; $chain ||= $default_chain; - $option = '--set-mark'; - my $chainref = ensure_chain( 'mangle', $chain = $chainnames{$chain} ); for ( my $packet = 0; $packet < $marks; $packet++, $markval += $increment ) { @@ -286,7 +290,7 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$ ) { $source , $dest , '' , - "$target $option " . join( '/', in_hex( $markval ) , $mask ) , + join( ' ', $target, $option , join( '/', in_hex( $markval ) , $mask ) ) , '', $target , $exceptionrule ); @@ -317,12 +321,6 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$ ) { } } - if ( $option ) { - $target = join( ' ', $target, $option ); - } else { - $target = join( ' ', $target, $and_or eq '|' ? '--or-mark' : $and_or ? '--and-mark' : '--set-mark' ); - } - ( $mark, my $mask ) = split '/', $mark; if ( supplied $mask ) {