class PtToPtIntentVirtualNetworkProvider extends AbstractProvider implements VirtualNetworkProvider {

    @Override
    public TunnelId createTunnel(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
        checkNotNull(networkId, NETWORK_ID_NULL);
        checkNotNull(src, CONNECT_POINT_NULL);
        checkNotNull(dst, CONNECT_POINT_NULL);
        Key intentKey = encodeKey(networkId, src, dst);

        List<Constraint> constraints = new ArrayList<>();
        constraints.add(new EncapsulationConstraint(EncapsulationType.VLAN));

        // TODO Currently there can only be one tunnel/intent between the src and dst across
        // all virtual networks. We may want to support multiple intents between the same src/dst pairs.
        PointToPointIntent intent = PointToPointIntent.builder()
                .key(intentKey)
                .appId(appId)
                .ingressPoint(src)
                .egressPoint(dst)
                .constraints(constraints)
                .build();
        intentService.submit(intent);

        // construct tunnelId from the key
        return TunnelId.valueOf(intentKey.toString());
    }

    public  PtToPtIntentVirtualNetworkProvider();

}