diff options
Diffstat (limited to 'libccnx-transport-rta/ccnx/api/control/cpi_ConnectionEthernet.h')
-rw-r--r-- | libccnx-transport-rta/ccnx/api/control/cpi_ConnectionEthernet.h | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/libccnx-transport-rta/ccnx/api/control/cpi_ConnectionEthernet.h b/libccnx-transport-rta/ccnx/api/control/cpi_ConnectionEthernet.h new file mode 100644 index 00000000..877810b2 --- /dev/null +++ b/libccnx-transport-rta/ccnx/api/control/cpi_ConnectionEthernet.h @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * 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. + */ + +/** + * @file cpi_ConnectionEthernet.h + * @brief Represents an ethernet connection + * + * An ethernet connection is a (local interface name, remote mac address, ethertype) tuple. A unicast + * connection, for example, could be ("em3", 3c:15:c2:e7:c5:ca, 0x0801). The broadcast connection would + * be ("em3", ff:ff:ff:ff:ff:ff, 0x0801). You could also use group mac addresses. + * + * Creating an ethernet connetion in the forwarder sets up an entry in the connection table that + * you an then attach routes to. For example, you could add a route to /foo via the connection + * ("em3", 3c:15:c2:e7:c5:ca, 0x0801), in which case an Interest would be unicast that way. A route + * to a broadcast or group address would broadcast the interest. + * + */ + +#ifndef CCNx_Control_API_cpi_ConnectionEthernet_h +#define CCNx_Control_API_cpi_ConnectionEthernet_h + +struct cpi_connection_ethernet; +typedef struct cpi_connection_ethernet CPIConnectionEthernet; + +#include <ccnx/api/control/cpi_Address.h> +#include <ccnx/api/control/cpi_ControlMessage.h> + +/** + * Creates a CPIConnectionEthernet object + * + * The symbolic name represents this connection and may be used by other commands. It must be + * unique, otherwise the command will fail when sent to the forwarder. + * + * @param [in] interfaceName The name of the local interface + * @param [in] peerLinkAddress The link layer address of the peer (stores a reference to it) + * @param [in] ethertype The ethertype to use (host byte order) + * @param [in] symbolic The user-defined symbolic name + * + * @return non-null An Allocated object + * @return null An error + * + * Example: + * @code + * <#example#> + * @endcode + */ +CPIConnectionEthernet *cpiConnectionEthernet_Create(const char *interfaceName, CPIAddress *peerLinkAddress, uint16_t ethertype, const char *symbolic); + +/** + * Releases a reference count to the object + * + * <#Paragraphs Of Explanation#> + * + * @param [in,out] etherConnPtr A pointer to an etherConn object, will be null'd. + * + * Example: + * @code + * <#example#> + * @endcode + */ +void cpiConnectionEthernet_Release(CPIConnectionEthernet **etherConnPtr); + +/** + * Determine if two CPIConnectionEthernet instances are equal. + * + * Two CPIConnectionEthernet instances are equal if, and only if, + * they are either both null or both non-null and compare + * as equal field-for-field over (interfaceName, peerLinkAddress, ethertype, symbolic). + * + * The interface name is case sensitive, so "ETH0" is not the same as "eth0". + * + * + * The following equivalence relations on non-null `CPIConnectionEthernet` instances are maintained: + * + * * It is reflexive: for any non-null reference value x, `CPIConnectionEthernet_Equals(x, x)` + * must return true. + * + * * It is symmetric: for any non-null reference values x and y, + * `cpiConnectionEthernet_Equals(x, y)` must return true if and only if + * `cpiConnectionEthernet_Equals(y, x)` returns true. + * + * * It is transitive: for any non-null reference values x, y, and z, if + * `cpiConnectionEthernet_Equals(x, y)` returns true and + * `cpiConnectionEthernet_Equals(y, z)` returns true, + * then `cpiConnectionEthernet_Equals(x, z)` must return true. + * + * * It is consistent: for any non-null reference values x and y, multiple + * invocations of `cpiConnectionEthernet_Equals(x, y)` consistently return true or + * consistently return false. + * + * * For any non-null reference value x, `cpiConnectionEthernet_Equals(x, NULL)` must + * return false. + * + * @param a A pointer to a `CPIConnectionEthernet` instance. + * @param b A pointer to a `CPIConnectionEthernet` instance. + * @return true if the two `CPIConnectionEthernet` instances are equal. + * + * Example: + * @code + * { + * CPIConnectionEthernet *a = cpiConnectionEthernet_Create(); + * CPIConnectionEthernet *b = cpiConnectionEthernet_Create(); + * + * if (cpiConnectionEthernet_Equals(a, b)) { + * // true + * } else { + * // false + * } + * } + * @endcode + */ + +bool cpiConnectionEthernet_Equals(const CPIConnectionEthernet *a, const CPIConnectionEthernet *b); + +/** + * Creates a control message to add the connection + * + * An add message indicates to the forwarder that it should add the corresponding + * Ethernet connection. + * + * @param [<#in out in,out#>] <#name#> <#description#> + * + * @return non-null a CPI control message + * @return null An error + * + * Example: + * @code + * <#example#> + * @endcode + */ +CCNxControl *cpiConnectionEthernet_CreateAddMessage(const CPIConnectionEthernet *etherConn); + +/** + * Creates a control message to remove the connection + * + * A remove message indicates to the forwarder that it should remove the corresponding + * Ethernet connection. + * + * @param [<#in out in,out#>] <#name#> <#description#> + * + * @return non-null a CPI control message + * @return null An error + * + * Example: + * @code + * <#example#> + * @endcode + */ +CCNxControl *cpiConnectionEthernet_CreateRemoveMessage(const CPIConnectionEthernet *etherConn); + +/** + * Checks if the control message is an Add command + * + * <#Paragraphs Of Explanation#> + * + * @param [<#in out in,out#>] <#name#> <#description#> + * + * @return true Message is an Add command for a ConnectionEthernet + * @return false Message is not an Add command for a ConnectionEthernet + * + * Example: + * @code + * <#example#> + * @endcode + */ +bool cpiConnectionEthernet_IsAddMessage(const CCNxControl *control); + +/** + * Checks if the message is a Remove command + * + * <#Paragraphs Of Explanation#> + * + * @param [in] control A CCNx Control message + * + * @return true Message is an Remove command for a ConnectionEthernet + * @return false Message is not Remove Add command for a ConnectionEthernet + * + * Example: + * @code + * <#example#> + * @endcode + */ +bool cpiConnectionEthernet_IsRemoveMessage(const CCNxControl *control); + +/** + * Creates an object from the control message + * + * The object does not carry any sense of Add or Remove, that is only part of the + * Control message. + * + * @param [in] control A CCNx Control message + * + * @return non-null An Allocated object + * @return null An error + * + * Example: + * @code + * <#example#> + * @endcode + */ +CPIConnectionEthernet *cpiConnectionEthernet_FromControl(const CCNxControl *control); + +/** + * Returns the interface name + * + * The caller should duplicate the string if it will be stored. + * + * @param [in] etherConn An allocated CPIConnectionEthernet + * + * @return <#value#> <#explanation#> + * + * Example: + * @code + * <#example#> + * @endcode + */ +const char *cpiConnectionEthernet_GetInterfaceName(const CPIConnectionEthernet *etherConn); + +/** + * Returns the symbolic name + * + * The caller should duplicate the string if it will be stored. + * + * @param [in] etherConn An allocated CPIConnectionEthernet + * + * @return <#value#> <#explanation#> + * + * Example: + * @code + * <#example#> + * @endcode + */ +const char *cpiConnectionEthernet_GetSymbolicName(const CPIConnectionEthernet *etherConn); + +/** + * Returns the peer link address + * + * Returns the peer's link address (e.g. 48-bit MAC address). The caller should + * acquire its own reference if he address will be stored externally to the + * CPIConnectionEthernet. + * + * @param [<#in out in,out#>] <#name#> <#description#> + * + * @return non-null The peer's link address + * @return null An error + * + * Example: + * @code + * <#example#> + * @endcode + */ +CPIAddress *cpiConnectionEthernet_GetPeerLinkAddress(const CPIConnectionEthernet *etherConn); + +/** + * Returns the ethertype to use + * + * The ethertype will be in host byte order. + * + * @param [<#in out in,out#>] <#name#> <#description#> + * + * @return <#value#> <#explanation#> + * + * Example: + * @code + * <#example#> + * @endcode + */ +uint16_t cpiConnectionEthernet_GetEthertype(const CPIConnectionEthernet *etherConn); +#endif // CCNx_Control_API_cpi_ConnectionEthernet_h |