@ -4,6 +4,7 @@
* Author : Steven Barth < cyrus @ openwrt . org >
* Copyright ( c ) 2014 - 2015 cisco Systems , Inc .
* Copyright ( c ) 2015 Steven Barth < cyrus @ openwrt . org >
* Copyright ( c ) 2018 Hans Dedecker < dedeckeh @ gmail . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2
@ -311,25 +312,30 @@ int main(int argc, char *argv[])
if ( psidlen < = 0 ) {
psidlen = ealen - ( 32 - prefix4len ) ;
if ( psidlen < 0 )
psidlen = 0 ;
psid = - 1 ;
}
if ( psid < 0 & & psidlen < = 16 & & psidlen > = 0 & & pdlen > = 0 & & ealen > = psidlen ) {
if ( prefix4len < 0 | | prefix6len < 0 | | ealen < 0 | | psidlen > 16 | | ealen < psidlen ) {
fprintf ( stderr , " Skipping invalid or incomplete rule: %s \n " , argv [ i ] ) ;
status = 1 ;
continue ;
}
if ( psid < 0 & & psidlen > = 0 & & pdlen > = 0 ) {
bmemcpys64 ( & psid16 , & pd , prefix6len + ealen - psidlen , psidlen ) ;
psid = be16_to_cpu ( psid16 ) ;
}
psid = psid > > ( 16 - psidlen ) ;
psid16 = cpu_to_be16 ( psid ) ;
psid = psid < < ( 16 - psidlen ) ;
if ( prefix4len < 0 | | prefix6len < 0 | | ealen < 0 | | ealen < psidlen ) {
fprintf ( stderr , " Skipping invalid or incomplete rule: %s \n " , argv [ i ] ) ;
status = 1 ;
continue ;
if ( psidlen > 0 ) {
psid = psid > > ( 16 - psidlen ) ;
psid16 = cpu_to_be16 ( psid ) ;
psid = psid < < ( 16 - psidlen ) ;
}
if ( ( pdlen > = 0 | | ealen = = psidlen ) & & ealen > = psidlen ) {
if ( pdlen > = 0 | | ealen = = psidlen ) {
bmemcpys64 ( & ipv4addr , & pd , prefix6len , ealen - psidlen ) ;
ipv4addr . s_addr = htonl ( ntohl ( ipv4addr . s_addr ) > > prefix4len ) ;
bmemcpy ( & ipv4addr , & ipv4prefix , prefix4len ) ;