@Override public void write(Kryo kryo, Output output, DefaultLink object) { kryo.writeClassAndObject(output, object.providerId()); kryo.writeClassAndObject(output, object.src()); kryo.writeClassAndObject(output, object.dst()); kryo.writeClassAndObject(output, object.type()); kryo.writeClassAndObject(output, object.state()); output.writeBoolean(object.isExpected()); }
@Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof DefaultVirtualLink) { DefaultVirtualLink that = (DefaultVirtualLink) obj; return super.equals(that) && Objects.equals(this.networkId, that.networkId) && Objects.equals(this.tunnelId, that.tunnelId); } return false; }
private Link link(PcepDpid src, long sp, PcepDpid dst, long dp) { return DefaultLink.builder() .providerId(id()) .src(connectPoint(src, sp)) .dst(connectPoint(dst, dp)) .type(Link.Type.TUNNEL) .build(); }
private Link composeLink(Map<ProviderId, LinkDescription> descs) { ProviderId primary = getBaseProviderId(descs); LinkDescription base = descs.get(verifyNotNull(primary)); ConnectPoint src = base.src(); ConnectPoint dst = base.dst(); Type type = base.type(); DefaultAnnotations annotations = DefaultAnnotations.builder().build(); annotations = merge(annotations, base.annotations()); for (Entry<ProviderId, LinkDescription> e : descs.entrySet()) { if (primary.equals(e.getKey())) { continue; } // TODO: should keep track of Description timestamp // and only merge conflicting keys when timestamp is newer // Currently assuming there will never be a key conflict between // providers // annotation merging. not so efficient, should revisit later annotations = merge(annotations, e.getValue().annotations()); } boolean isDurable = Objects.equals(annotations.value(AnnotationKeys.DURABLE), "true"); return new DefaultLink(primary, src, dst, type, ACTIVE, isDurable, annotations); }
DefaultLink defaultLink = DefaultLink.builder() .providerId(PROVIDER_ID) .src(start)
@Override public LinkEvent removeOrDownLink(ConnectPoint src, ConnectPoint dst) { Link link = getLink(src, dst); if (link == null) { return null; } if (link.isDurable()) { return link.state() == INACTIVE ? null : updateLink(linkKey(link.src(), link.dst()), link, new DefaultLink(link.providerId(), link.src(), link.dst(), link.type(), INACTIVE, link.isDurable(), link.annotations())); } return removeLink(src, dst); }
.builder() .providerId(pid) .src(src)
private Link reverseLink(Link link) { return DefaultLink.builder().providerId(link.providerId()) .src(link.dst()) .dst(link.src()) .type(link.type()) .state(link.state()) .isExpected(link.isExpected()) .build(); }
portNo = PortNumber.portNumber(splitted[DESTINATION_PORTNO_INDEX]); ConnectPoint cpDst = new ConnectPoint(deviceId, portNo); res = DefaultLink.builder() .providerId(ProviderId.NONE) .src(cpSrc)
@Override public DefaultLink read(Kryo kryo, Input input, Class<DefaultLink> type) { ProviderId providerId = (ProviderId) kryo.readClassAndObject(input); ConnectPoint src = (ConnectPoint) kryo.readClassAndObject(input); ConnectPoint dst = (ConnectPoint) kryo.readClassAndObject(input); Type linkType = (Type) kryo.readClassAndObject(input); State state = (State) kryo.readClassAndObject(input); boolean isDurable = input.readBoolean(); return DefaultLink.builder() .providerId(providerId) .src(src) .dst(dst) .type(linkType) .state(state) .isExpected(isDurable) .build(); } }
/** * Returns a link in reverse direction. * * @param link to revese * @return reversed link */ Link reverse(Link link) { return DefaultLink.builder() .providerId(link.providerId()) .src(link.dst()) .dst(link.src()) .type(link.type()) .state(link.state()) .isExpected(link.isExpected()) .annotations(link.annotations()) .build(); }