diff options
| author | Daniil Baturin <daniil@vyos.io> | 2023-04-21 13:38:13 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-21 13:38:13 +0100 | 
| commit | 821bc4f511460123e958b8eaa2e588e4623fbfe6 (patch) | |
| tree | ca5283d32a34969fa95b9ee1f1421bf7f28db5bd /src/op_mode/ipsec.py | |
| parent | dcba3685345b0624c13f83211628136076feac79 (diff) | |
| parent | 97ef83ada9c42913bae3c80e0f2432bdf901312a (diff) | |
| download | vyos-1x-821bc4f511460123e958b8eaa2e588e4623fbfe6.tar.gz vyos-1x-821bc4f511460123e958b8eaa2e588e4623fbfe6.zip  | |
Merge branch 'current' into current
Diffstat (limited to 'src/op_mode/ipsec.py')
| -rwxr-xr-x | src/op_mode/ipsec.py | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/src/op_mode/ipsec.py b/src/op_mode/ipsec.py index 6acde08ea..7f4fb72e5 100755 --- a/src/op_mode/ipsec.py +++ b/src/op_mode/ipsec.py @@ -13,6 +13,7 @@  #  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. +  import re  import sys  import typing @@ -487,6 +488,67 @@ def reset_ra(username: typing.Optional[str] = None):          vyos.ipsec.terminate_vici_ikeid_list(list_sa_id) +def reset_profile_dst(profile: str, tunnel: str, nbma_dst: str): +    if profile and tunnel and nbma_dst: +        ike_sa_name = f'dmvpn-{profile}-{tunnel}' +        try: +            # Get IKE SAs +            sa_list = convert_data( +                vyos.ipsec.get_vici_sas_by_name(ike_sa_name, None)) +            if not sa_list: +                raise vyos.opmode.IncorrectValue( +                    f'SA(s) for profile {profile} tunnel {tunnel} not found, aborting') +            sa_nbma_list = list([x for x in sa_list if +                                 ike_sa_name in x and x[ike_sa_name][ +                                     'remote-host'] == nbma_dst]) +            if not sa_nbma_list: +                raise vyos.opmode.IncorrectValue( +                    f'SA(s) for profile {profile} tunnel {tunnel} remote-host {nbma_dst} not found, aborting') +            # terminate IKE SAs +            vyos.ipsec.terminate_vici_ikeid_list(list( +                [x[ike_sa_name]['uniqueid'] for x in sa_nbma_list if +                 ike_sa_name in x])) +            # initiate IKE SAs +            for ike in sa_nbma_list: +                if ike_sa_name in ike: +                    vyos.ipsec.vici_initiate(ike_sa_name, 'dmvpn', +                                             ike[ike_sa_name]['local-host'], +                                             ike[ike_sa_name]['remote-host']) +            print( +                f'Profile {profile} tunnel {tunnel} remote-host {nbma_dst} reset result: success') +        except (vyos.ipsec.ViciInitiateError) as err: +            raise vyos.opmode.UnconfiguredSubsystem(err) +        except (vyos.ipsec.ViciCommandError) as err: +            raise vyos.opmode.IncorrectValue(err) + + +def reset_profile_all(profile: str, tunnel: str): +    if profile and tunnel: +        ike_sa_name = f'dmvpn-{profile}-{tunnel}' +        try: +            # Get IKE SAs +            sa_list: list = convert_data( +                vyos.ipsec.get_vici_sas_by_name(ike_sa_name, None)) +            if not sa_list: +                raise vyos.opmode.IncorrectValue( +                    f'SA(s) for profile {profile} tunnel {tunnel} not found, aborting') +            # terminate IKE SAs +            vyos.ipsec.terminate_vici_by_name(ike_sa_name, None) +            # initiate IKE SAs +            for ike in sa_list: +                if ike_sa_name in ike: +                    vyos.ipsec.vici_initiate(ike_sa_name, 'dmvpn', +                                             ike[ike_sa_name]['local-host'], +                                             ike[ike_sa_name]['remote-host']) +                print( +                    f'Profile {profile} tunnel {tunnel} remote-host {ike[ike_sa_name]["remote-host"]} reset result: success') +            print(f'Profile {profile} tunnel {tunnel} reset result: success') +        except (vyos.ipsec.ViciInitiateError) as err: +            raise vyos.opmode.UnconfiguredSubsystem(err) +        except (vyos.ipsec.ViciCommandError) as err: +            raise vyos.opmode.IncorrectValue(err) + +  def show_sa(raw: bool):      sa_data = _get_raw_data_sas()      if raw:  | 
