예제 #1
0
파일: sat.py 프로젝트: frenetic-lang/slices
def shared_transit(topo, policy1, policy2):
    """Try to find packet in the border of policy1 and the border of policy2.
    
    Note that this is symmetric.
    """
    p, pp, ppp, qq, qqq = Consts("p pp ppp qq qqq", Packet)
    o, n = Ints("o n")

    solv = Solver()
    # Predicates are focused on a packet p, all other packets are fodder for
    # that one.  We want an input packet p or an output packet after a hop p in
    # each case.
    solv.add(Or(ingress(policy1, p, pp, o), And(egress(policy1, pp, ppp), transfer(topo, ppp, p))))
    solv.add(Or(ingress(policy2, p, qq, n), And(egress(policy2, qq, qqq), transfer(topo, qqq, p))))

    if solv.check() == unsat:
        return None
    else:
        return solv.model(), (p,), HEADER_INDEX
예제 #2
0
파일: sat.py 프로젝트: frenetic-lang/slices
def shared_inputs(policy1, policy2):
    """Try to find packet in input of policy1 and ingress of policy2."""
    p, pp, qq = Consts("p pp qq", Packet)
    o, n = Ints("o n")

    solv = Solver()
    solv.add(input(policy1, p, pp, o))
    solv.add(ingress(policy2, p, qq, n))

    if solv.check() == unsat:
        return None
    else:
        return solv.model(), (p, pp, qq), HEADER_INDEX