void addAcl() throws Exception { Optional<TerminationPoint> optional = readTp(); if (optional.isPresent()) { LogicalPortAugment lpAug = optional.get().getAugmentation(LogicalPortAugment.class); if (lpAug == null) { return; } LportAttribute lattr = lpAug.getLportAttribute(); List<UnderlayerPorts> uports = lattr.getUnderlayerPorts(); if (uports == null || uports.isEmpty()) { return; } WriteTransaction trans = databroker.newWriteOnlyTransaction(); FabricAclBuilder builder = new FabricAclBuilder(); builder.setFabricAclName(aclname); for (UnderlayerPorts uport : uports) { @SuppressWarnings("unchecked") InstanceIdentifier<BdPort> bdPortIid = (InstanceIdentifier<BdPort>) uport.getPortRef(); InstanceIdentifier<FabricAcl> path = bdPortIid.child(FabricAcl.class, new FabricAclKey(aclname)); trans.merge(LogicalDatastoreType.OPERATIONAL, path, builder.build(), true); } MdSalUtils.wrapperSubmit(trans); } }
@Override public Future<RpcResult<Void>> addAcl(AddAclInput input) { String aclName = input.getAclName(); FabricId fabricId = input.getFabricId(); NodeId ldev = input.getLogicalDevice(); TpId tpId = input.getLogicalPort(); final FabricInstance fabricObj = FabricInstanceCache.INSTANCE.retrieveFabric(fabricId); if (fabricObj == null) { return Futures.immediateFailedFuture( new IllegalArgumentException(String.format("fabric %s does not exist", fabricId))); } final InstanceIdentifier<FabricAcl> aclIId = fabricObj.addAcl(ldev, tpId, aclName); if (aclIId == null) { return Futures.immediateFailedFuture( new IllegalArgumentException("Can not add acl, maybe the target is not exists !")); } FabricAclBuilder aclBuilder = new FabricAclBuilder(); aclBuilder.setFabricAclName(aclName); aclBuilder.setKey(new FabricAclKey(aclName)); WriteTransaction trans = dataBroker.newWriteOnlyTransaction(); trans.merge(LogicalDatastoreType.OPERATIONAL,aclIId, aclBuilder.build(), false); return Futures.transform(trans.submit(), new AsyncFunction<Void, RpcResult<Void>>() { @Override public ListenableFuture<RpcResult<Void>> apply(Void submitResult) throws Exception { fabricObj.notifyAclUpdated(aclIId, false); return Futures.immediateFuture(RpcResultBuilder.<Void>success().build()); } }, executor); }
public void syncAcl(List<LogicSwitchContext> lswCtxs) { WriteTransaction trans = databroker.newWriteOnlyTransaction(); boolean updated = false; for (LogicSwitchContext lswCtx : lswCtxs) { int vlan = lswCtx.getVlan(); if (!bdifs.containsKey(vlan)) { continue; } else { String bdifid = createBdIfId(vlan); for (String aclName : lswCtx.gtAcls()) { InstanceIdentifier<FabricAcl> aclIid = deviceIId.augmentation(FabricCapableDevice.class) .child(Config.class).child(Bdif.class, new BdifKey(bdifid)) .child(FabricAcl.class, new FabricAclKey(aclName)); FabricAclBuilder builder = new FabricAclBuilder(); builder.setFabricAclName(aclName); trans.merge(LogicalDatastoreType.OPERATIONAL, aclIid, builder.build(), true); updated = true; } } } if (updated) { MdSalUtils.wrapperSubmit(trans); } else { trans.cancel(); } }