alshabib
Committed by Gerrit Code Review

Initial sketch of driver based configuration api.

Change-Id: I82468aea5d698b28a4fd996142f9c88d7a56e31f
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.behaviour;
import java.util.List;
/**
* Device behaviour to obtain and set controllers at the device.
*/
public interface ControllerConfig {
//TODO: add other controller parameters as needed.
/**
* Obtain the list of controller which are currently configured.
* @return a list for controller descriptions
*/
List<ControllerInfo> getControllers();
/**
* Set a list of controllers on a device.
* @param controllers a list of controller descriptions
*/
void setControllers(List<ControllerInfo> controllers);
}
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.behaviour;
import org.onlab.packet.IpAddress;
/**
* Represents information for a device to connect to a controller.
*/
public class ControllerInfo {
public final IpAddress ip;
public final int tcpPort;
public ControllerInfo(IpAddress ip, int tcpPort) {
this.ip = ip;
this.tcpPort = tcpPort;
}
}
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.behaviour;
import com.google.common.primitives.UnsignedInteger;
import org.onosproject.net.PortNumber;
/**
* Means to configure a logical port at the device.
*/
public interface PortConfig {
/**
* Apply QoS configuration on a device.
* @param port a port number
* @param queueId an unsigned integer
*/
void applyQoS(PortNumber port, UnsignedInteger queueId);
/**
* Remove a QoS configuration.
* @param port a port number
*/
void removeQoS(PortNumber port);
/**
* Enable/disable administratively a port.
* @param port a port number
* @param state a boolean indicating state
*/
void setEnabled(PortNumber port, boolean state);
}
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.behaviour;
import com.google.common.primitives.UnsignedInteger;
import java.util.Set;
/**
* Means to alter a device's dataplane queues.
*/
public interface QueueConfig {
/**
* Obtain all queues configured on a device.
*
* @return a list of queue descriptions
*/
Set<QueueInfo> getQueues();
/**
* Obtain a specific queue given a queue id.
*
* @param queueId an unsigned integer representing a queue id
* @return a queue description
*/
QueueInfo getQueue(UnsignedInteger queueId);
/**
* Add a queue to a device.
*
* @param queue a queue description
*/
void addQueue(QueueInfo queue);
/**
* Remove a queue from a device.
*
* @param queueId an unsigned integer
*/
void removeQueue(UnsignedInteger queueId);
}
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.behaviour;
import com.google.common.primitives.UnsignedInteger;
/**
* Represents a dataplane queue.
*/
public class QueueInfo {
public enum Type {
/**
* Supports burst and priority as well as min and max rates.
*/
FULL,
/**
* Only support min and max rates.
*/
MINMAX
}
private final UnsignedInteger queueId;
private final Type type;
private final long minRate;
private final long maxRate;
private final long burst;
private final long priority;
public QueueInfo(UnsignedInteger queueId, Type type, long minRate,
long maxRate, long burst, long priority) {
this.queueId = queueId;
this.type = type;
this.minRate = minRate;
this.maxRate = maxRate;
this.burst = burst;
this.priority = priority;
}
//TODO builder
// public static QueueInfoBuilder builder() {}
}