# Path: framework/data_model.py
# class DataModel(object):
#         class Accumulator:
# class NodeBackend(object):
#     def pre_build(self):
#     def build_data_model(self):
#     def validation_tests(self):
#     def _atom_absorption_additional_actions(self, atom):
#     def create_atom_from_raw_data(self, data, idx, filename):
#     def register_atom_for_absorption(self, atom, absorb_constraints=AbsFullCsts(),
#                                      decoding_scope=None):
#     def decode(self, data, atom_name=None, requested_abs_csts=None, colorized=True):
#             def accumulate(self, msg):
#     def cleanup(self):
#     def __init__(self):
#     def _backend(self, atom):
#     def __str__(self):
#     def register(self, *atom_list):
#     def get_atom(self, hash_key, name=None):
#     def get_atom_for_absorption(self, hash_key):
#     def get_external_atom(self, dm_name, data_id, name=None):
#     def load_data_model(self, dm_db):
#     def merge_with(self, data_model):
#     def atom_identifiers(self):
#     def update_atom(self, atom):
#     def show(self):
#     def import_file_contents(self, extension=None, absorber=None,
#                              subdir=None, path=None, filename=None):
#         def is_good_file_by_ext(fname):
#         def is_good_file_by_fname(fname):
#     def get_import_directory_path(self, subdir=None):
#     def __init__(self, data_model):
#     def merge_with(self, node_backend):
#     def prepare_atom(self, atom):
#     def atom_copy(self, orig_atom, new_name=None):
#     def update_atom(self, atom, existing_env=False):
#     def get_all_confs(self):


from framework.tactics_helpers import *
from framework.scenario import *
from framework.global_resources import *
from framework.data_model import MH
from framework.target_helpers import *

    def disrupt_data(self, dm, target, prev_data):
        n = prev_data.content
        n.freeze()
        error_msg = '\n*** The node has no path to: {:s}. Thus, ignore it.\n'\
                    '    (probable reason: the node has been fuzzed in a way that makes the' \
                    ' path unavailable)'
        if self.mac_src:
            try:
                n['.*/mac_dst'] = self.mac_src
                prev_data.add_info("update 'mac_src'")
                if not self.reevaluate_csts:
                    n['.*/mac_dst'].unfreeze(dont_change_state=True)
            except:
                print(error_msg.format('mac_dst'))
        else:
            print("\n*** 'mac_src' not found in the environment! ***")

        if self.reevaluate_csts:
            if self.service_name:
                try:
                    n['.*/tag_sn/value/v101'] = self.service_name
                    prev_data.add_info("update 'service_name'")
                except:
                    print(error_msg.format('service_name'))
            else:
                print("\n*** 'service_name' not found in the environment! ***")

        if self.host_uniq:
            try:

# Path: framework/data_model.py
# class DataModel(object):
#         class Accumulator:
# class NodeBackend(object):
#     def pre_build(self):
#     def build_data_model(self):
#     def validation_tests(self):
#     def _atom_absorption_additional_actions(self, atom):
#     def create_atom_from_raw_data(self, data, idx, filename):
#     def register_atom_for_absorption(self, atom, absorb_constraints=AbsFullCsts(),
#                                      decoding_scope=None):
#     def decode(self, data, atom_name=None, requested_abs_csts=None, colorized=True):
#             def accumulate(self, msg):
#     def cleanup(self):
#     def __init__(self):
#     def _backend(self, atom):
#     def __str__(self):
#     def register(self, *atom_list):
#     def get_atom(self, hash_key, name=None):
#     def get_atom_for_absorption(self, hash_key):
#     def get_external_atom(self, dm_name, data_id, name=None):
#     def load_data_model(self, dm_db):
#     def merge_with(self, data_model):
#     def atom_identifiers(self):
#     def update_atom(self, atom):
#     def show(self):
#     def import_file_contents(self, extension=None, absorber=None,
#                              subdir=None, path=None, filename=None):
#         def is_good_file_by_ext(fname):
#         def is_good_file_by_fname(fname):
#     def get_import_directory_path(self, subdir=None):
#     def __init__(self, data_model):
#     def merge_with(self, node_backend):
#     def prepare_atom(self, atom):
#     def atom_copy(self, orig_atom, new_name=None):
#     def update_atom(self, atom, existing_env=False):
#     def get_all_confs(self):


# Path: data_models/protocols/pppoe_strategy.py
from framework.tactics_helpers import *
from framework.scenario import *
from framework.global_resources import *
from framework.data_model import MH
from framework.target_helpers import *


    def disrupt_data(self, dm, target, prev_data):
        n = prev_data.content
        n.freeze()
        error_msg = '\n*** The node has no path to: {:s}. Thus, ignore it.\n'\
                    '    (probable reason: the node has been fuzzed in a way that makes the' \
                    ' path unavailable)'
        if self.mac_src:
            try:
                n['.*/mac_dst'] = self.mac_src
                prev_data.add_info("update 'mac_src'")
                if not self.reevaluate_csts:
                    n['.*/mac_dst'].unfreeze(dont_change_state=True)
            except:
                print(error_msg.format('mac_dst'))
        else:
            print("\n*** 'mac_src' not found in the environment! ***")

        if self.reevaluate_csts:
            if self.service_name:
                try:
                    n['.*/tag_sn/value/v101'] = self.service_name
                    prev_data.add_info("update 'service_name'")
                except:
                    print(error_msg.format('service_name'))
            else:
                print("\n*** 'service_name' not found in the environment! ***")

        if self.host_uniq:
            try:

                if not n['.*/tag_host_uniq/.*/v103'].is_attr_set(MH.Attr.LOCKED) and \