def __init__(self, sim_env): ''' Constructor Input: sim_env simpy.Environment environment of this component MessageClass AbstractBusMessage class that is used for sending and receiving Output: - ''' AbstractCommModule.__init__(self, sim_env) # layers self.transp_lay = StdTransportLayer(sim_env) self.datalink_lay = StdDatalinkLayer(sim_env) self.physical_lay = StdPhysicalLayer(sim_env) # preset used if GeneralSpecPreset().enabled: self.transp_lay = GeneralSpecPreset().transport_layer(sim_env, proj.BUS_MSG_CLASS) self.datalink_lay = GeneralSpecPreset().datalink_layer(sim_env) self.physical_lay = GeneralSpecPreset().physical_layer(sim_env) # interconnect layers self.datalink_lay.physical_lay = self.physical_lay self.transp_lay.datalink_lay = self.datalink_lay self.set_settings() # Timing Variables self.STDCM_RECEIVE_PROCESS = time.STDCM_RECEIVE_PROCESS self.STDCM_SEND_PROCESS = time.STDCM_SEND_PROCESS
def __init__(self, sim_env, ecu_id): ''' Constructor Input: ecu_id string id of the corresponding AbstractECU sim_env simpy.Environment environment of this component Output: - ''' AbstractCommModule.__init__(self, sim_env) # local parameters self._ecu_id = ecu_id self._jitter_in = 1 self.monitor_list = RefList() # initialize self._init_layers(self.sim_env, self.MessageClass) # add tags self._tags = ["AUTH_SEND_TIME_BEFORE_ENCRYPTION", "AUTH_SEND_TIME_AFTER_ENCRYPTION", "AUTH_RECEIVE_TIME_BEFORE_DECRYPTION", "AUTH_RECEIVE_TIME_AFTER_DECRYPTION"] # NEW: Add key pair - public and private assymetric_encryption_algorithm = AsymAuthMechEnum.RSA assymetric_encryption_key_length = AuKeyLengthEnum.bit_512 assymetric_encryption_option = 65537 self.priv_key, self.pub_key = encryption_tools.asy_get_key_pair(assymetric_encryption_algorithm, assymetric_encryption_key_length, assymetric_encryption_option) PublicKeyManager().add_key(self._ecu_id, self.pub_key) # make public key available to everybody # Create a certificate from root L3 along L3 L31 L311 [certificate, root_certificates_to_verify_this_certificate, priv_key] = GeneralSpecPreset().certificate_manager.generate_valid_ecu_cert(self._ecu_id, CAEnum.CA_L311, 0, float('inf')) self.my_certificate = certificate self.my_root_certificates = root_certificates_to_verify_this_certificate
def connected_bus(self, new_bus): ''' if called adds a new port to this gateway. This port has all three layers and a whole hardware equipment Input: new_bus CANBus bus to be connected to new port Output: - ''' if new_bus != None: # create whole layer package per connected Bus self._connected_busses.append(new_bus) # create layers # preset used if GeneralSpecPreset().enabled: self._transceivers.append(StdTransceiver(self.sim_env)) self._controller.append(StdCanController(self.sim_env)) self._physical_layer.append(GeneralSpecPreset().physical_layer( self.sim_env)) self._datalink_layer.append(GeneralSpecPreset().datalink_layer( self.sim_env)) else: self._transceivers.append(StdTransceiver(self.sim_env)) self._controller.append(StdCanController(self.sim_env)) self._physical_layer.append(StdPhysicalLayer(self.sim_env)) self._datalink_layer.append(StdDatalinkLayer(self.sim_env)) # interconnect new layers self._datalink_layer[-1].controller = self._controller[-1] self.sim_env.process(self._datalink_layer[-1].process()) self._datalink_layer[-1].physical_lay = self._physical_layer[-1] self._physical_layer[-1].transceiver = self._transceivers[-1] self._physical_layer[ -1].transceiver.connected_bus = self._connected_busses[-1] # intercept gateway methods self._override_methods(self._physical_layer[-1].transceiver) # activate filter if self._filter_values: # install the fixed filter for all ecus self._transceivers[-1].install_filter(self._filter_values) if new_bus.comp_id in self._bus_filter_values: # install the filter for special busses self._transceivers[-1].install_filter( self._bus_filter_values[new_bus.comp_id])
def __init__(self, sim_env): ''' Constructor Input: sim_env simpy.Environment environment of this component Output: - ''' AbstractCommModule.__init__(self, sim_env) # initialize layers self.transp_lay = FakeSegmentTransportLayer(sim_env, proj.BUS_MSG_CLASS) self.datalink_lay = StdDatalinkLayer(sim_env) self.physical_lay = StdPhysicalLayer(sim_env) # preset used if GeneralSpecPreset().enabled: self.transp_lay = GeneralSpecPreset().transport_layer( sim_env, proj.BUS_MSG_CLASS) self.datalink_lay = GeneralSpecPreset().datalink_layer(sim_env) self.physical_lay = GeneralSpecPreset().physical_layer(sim_env) # connect layers self.datalink_lay.physical_lay = self.physical_lay self.transp_lay.datalink_lay = self.datalink_lay
LWASpecPresets().ecu_certificate_spec = [HashMechEnum.MD5, AsymAuthMechEnum.RSA, AuKeyLengthEnum.bit_512, 65537, 1, 1000] # ecu certificate info LWASpecPresets().confirmation_part = [100] # confirmation message size LWASpecPresets().ecu_key_info = [SymAuthMechEnum.AES, AuKeyLengthEnum.bit_128, SymAuthMechEnum.ECB] # ecu key specification LWASpecPresets().hold_rule = [False, 10] # hold on/off; minimal interval between two stream requests LWASpecPresets().request_spec = [100, 9999999999] # size of request message and timeout maximum LWASpecPresets().deny_spec = [100] # deny message size LWASpecPresets().grant_spec = [100] # grant message size LWASpecPresets().session_key_info = [SymAuthMechEnum.AES, AuKeyLengthEnum.bit_128, SymAuthMechEnum.ECB] # session key information # set further layer specifications GeneralSpecPreset().enable() GeneralSpecPreset().physical_layer = StdPhysicalLayer GeneralSpecPreset().datalink_layer = StdDatalinkLayer # datalink layer that is used in all ECUs that implement this option GeneralSpecPreset().transport_layer = FakeSegmentTransportLayer TimingDBMap().enable_fallback_message = True #=============================================================================== # Setting up a project #=============================================================================== # register ECUs that are located outside of the usual folders # usual folders: components.base.ecu.types and components.security.ecu.types #api.register_ecu_classes(r"C:\Users\artur.mrowca\workspace\ECUSimulation\components\base\gateways") # setup the logging
# -> Setup logging # -> Create Environment #=============================================================================== api.register_ecu_classes(os.path.join(os.path.dirname(__file__), "ecus")) # setup the logging api_log_path = os.path.join(os.path.dirname(__file__), "logs/api.log") api.show_logging(logging.INFO, api_log_path, True) # create an empty environment specification for the environment sim_env = api.create_environment(200) #=========================================================================== # Create Certificate Manager #=========================================================================== GeneralSpecPreset().certificate_manager = api.create_cert_manager() #=============================================================================== # Creating ECUs #=============================================================================== # create ECU with specification A ecu_spec = RegularECUSpec(["My_Test_ECU_1"], 20000, 20000) ecu_spec.add_sending_actions( 2, 0.5, 16, "TEST STRING B", 50 ) # sends a at time 10, 10.5, 11... message id 16, content test string b and size 50 ecu_group_1 = api.set_ecus(sim_env, 1, 'MyProtocolECU', ecu_spec) # create 2 ECUs with specification B (here: same as A) ecu_spec = RegularECUSpec(["My_Test_ECU_2", "My_Test_ECU_3"], 20000, 20000) ecu_group_3 = api.set_ecus(sim_env, 2, 'MyProtocolECU', ecu_spec)