use of org.onosproject.net.pi.runtime.PiTableEntry in project up4 by omec-project.
the class Up4NorthComponent method translateEntryAndApply.
/**
* Translate the given logical pipeline table entry or meter cell config
* to a Up4Service entry apply call.
*
* @param entry The logical table entry or meter cell config to be applied
* @throws StatusException if the entry fails translation or cannot be applied
*/
private void translateEntryAndApply(PiEntity entry) throws StatusException {
log.debug("Translating UP4 write request to fabric entry.");
try {
switch(entry.piEntityType()) {
case TABLE_ENTRY:
PiTableEntry tableEntry = (PiTableEntry) entry;
if (tableEntry.action().type() != PiTableAction.Type.ACTION) {
log.warn("Action profile entry insertion not supported.");
throw UNIMPLEMENTED.withDescription("Action profile entries not supported by UP4.").asException();
}
up4Service.apply(up4Translator.up4TableEntryToUpfEntity(tableEntry));
break;
case METER_CELL_CONFIG:
up4Service.apply(up4Translator.up4MeterEntryToUpfEntity((PiMeterCellConfig) entry));
break;
default:
throw UNIMPLEMENTED.withDescription("Unsupported entity type: " + entry.piEntityType()).asException();
}
} catch (Up4Translator.Up4TranslationException e) {
log.warn("Failed to parse entry from a write request: {}", e.getMessage());
throw INVALID_ARGUMENT.withDescription("Translation error: " + e.getMessage()).asException();
} catch (UpfProgrammableException e) {
log.warn("Failed to complete table entry insertion request: {}", e.getMessage());
switch(e.getType()) {
case ENTITY_EXHAUSTED:
throw io.grpc.Status.RESOURCE_EXHAUSTED.withDescription(e.getMessage()).asException();
case ENTITY_OUT_OF_RANGE:
throw INVALID_ARGUMENT.withDescription(e.getMessage()).asException();
case UNKNOWN:
default:
throw io.grpc.Status.UNAVAILABLE.withDescription(e.getMessage()).asException();
}
}
}
Aggregations