Skip to content

Sim2Real API

bridge

DockerBridge

Bridge connecting actions to the hypervisor backend.

Source code in netforge_rl\docker_bridge\bridge.py
class DockerBridge:
    """Bridge connecting actions to the hypervisor backend."""

    def __init__(self, mode: Literal['sim', 'real'] = 'sim') -> None:
        self.mode = mode
        self._driver: BaseHypervisor = self._init_driver(mode)

    def dispatch(
        self,
        action_name: str,
        target_ip: str,
        target_os: str,
    ) -> HypervisorResult:
        """Execute payload; auto-fallback to mock if real driver is down."""
        result = self._driver.dispatch(action_name, target_ip, target_os)
        logger.debug('DockerBridge: %s', result)
        return result

    def reward_delta(self, result: HypervisorResult) -> float:
        """Map a HypervisorResult to an immediate scalar reward delta."""
        if result.success:
            return _REWARD_DELTA['success']
        elif result.return_code == 2:
            # Container/infrastructure error
            return _REWARD_DELTA['failure_error']
        elif result.latency_ms >= _NOISY_LATENCY_THRESHOLD_MS:
            return _REWARD_DELTA['failure_noisy']
        else:
            return _REWARD_DELTA['failure_clean']

    def teardown_all(self) -> None:
        """Destroy all active containers/sessions — call at episode end."""
        self._driver.teardown_all()

    def is_available(self) -> bool:
        return self._driver.is_available()

    def _init_driver(self, mode: str) -> BaseHypervisor:
        if mode == 'real':
            driver = DockerHypervisor()
            if not driver.is_available():
                logger.warning(
                    'DockerBridge: real mode requested but Docker unavailable. '
                    'Falling back to mock hypervisor.'
                )
                return MockHypervisor()
            return driver

        # Default: sim / mock
        return MockHypervisor()

dispatch

dispatch(
    action_name: str, target_ip: str, target_os: str
) -> HypervisorResult

Execute payload; auto-fallback to mock if real driver is down.

Source code in netforge_rl\docker_bridge\bridge.py
def dispatch(
    self,
    action_name: str,
    target_ip: str,
    target_os: str,
) -> HypervisorResult:
    """Execute payload; auto-fallback to mock if real driver is down."""
    result = self._driver.dispatch(action_name, target_ip, target_os)
    logger.debug('DockerBridge: %s', result)
    return result

reward_delta

reward_delta(result: HypervisorResult) -> float

Map a HypervisorResult to an immediate scalar reward delta.

Source code in netforge_rl\docker_bridge\bridge.py
def reward_delta(self, result: HypervisorResult) -> float:
    """Map a HypervisorResult to an immediate scalar reward delta."""
    if result.success:
        return _REWARD_DELTA['success']
    elif result.return_code == 2:
        # Container/infrastructure error
        return _REWARD_DELTA['failure_error']
    elif result.latency_ms >= _NOISY_LATENCY_THRESHOLD_MS:
        return _REWARD_DELTA['failure_noisy']
    else:
        return _REWARD_DELTA['failure_clean']

teardown_all

teardown_all() -> None

Destroy all active containers/sessions — call at episode end.

Source code in netforge_rl\docker_bridge\bridge.py
def teardown_all(self) -> None:
    """Destroy all active containers/sessions — call at episode end."""
    self._driver.teardown_all()