pyveth - veth driver for Docker Engine written in Python
Jacek Kowalski
yesterday 9c5438da65bba198bba2a2a127f3f6448dcb56c5
lib/NetworkDriver.py
@@ -15,7 +15,7 @@
    return ''.join([random.choice(chars) for _ in range(size)])
def create_interface(endpoint, network) -> str:
def create_interface(endpoint, network) -> tuple[str, str]:
    ifname0 = 'veth{}'.format(genid())
    ifname1 = 'veth{}'.format(genid())
@@ -37,7 +37,7 @@
        ip.link('set', index=idx, state='up')
        if 'parent' in network.Options:
            id_parent = ip.link_lookup(ifname=network.Options['parent'])[0]
            print(ip.link("set", index=idx, master=id_parent))
            ip.link("set", index=idx, master=id_parent)
        endpoint.Interface.Peer = ifname1
    return ifname0, ifname1
@@ -57,6 +57,21 @@
    return {
        'Scope': 'local',
        'ConnectivityScope': 'global',
        'GwAllocChecker': True,
    }
@app.route('/NetworkDriver.GwAllocCheck', methods=['POST'])
def GwAllocCheck():
    request = GwAllocCheckEntity(**flask.request.get_json(force=True))
    skip_ipv4 = skip_ipv6 = request.Options.get('com.docker.network.generic', {}).get('nogw') == '1'
    if request.Options.get('com.docker.network.generic', {}).get('nogw4') == '1':
        skip_ipv4 = True
    if request.Options.get('com.docker.network.generic', {}).get('nogw6') == '1':
        skip_ipv6 = True
    return {
        'SkipIPv4': skip_ipv4,
        'SkipIPv6': skip_ipv6,
    }
@@ -142,11 +157,26 @@
            'SrcName': interface,
            'DstPrefix': 'eth',
        },
        'StaticRoutes': [],
    }
    if gw4 is not None:
        result['Gateway'] = gw4.ip.compressed
    if gw6 is not None:
        result['GatewayIPv6'] = gw6.ip.compressed
    gw4 = endpoint.Options.get("gw4", network.Options.get("gw4", None))
    if gw4 is not None:
        result['StaticRoutes'].append({
            'Destination': gw4 + '/32',
            'RouteType': 1,
        })
        result['Gateway'] = gw4
    gw6 = endpoint.Options.get("gw6", network.Options.get("gw6", None))
    if gw6 is not None:
        result['StaticRoutes'].append({
            'Destination': gw6 + '/128',
            'RouteType': 1,
        })
        result['GatewayIPv6'] = gw6
    return result