/*
 * Copyright 2017 The Android Open Source Project
 *
 * 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 android.system.net.netd@1.0;

/**
 * This is the root of the HAL module and is the interface returned when
 * loading an implementation of the INetd HAL.
 */
interface INetd {
    /**
     * Return values for INetd requests
     */
    enum StatusCode : int32_t {
        OK,
        INVALID_ARGUMENTS,
        NO_NETWORK,
        ALREADY_EXISTS,
        PERMISSION_DENIED,
        UNKNOWN_ERROR
    };

    /**
     * Creates a physical network to be used for interfaces managed by the OEM
     *
     * @return networkHandle a handle to the OEM network. Zero implies
     *             no networks are available and created
     * @return packetMark The packet mark that vendor network stack configuration code must use when
     *             routing packets to this network. No applications may use this mark. They must
     *             instead pass the networkHandle to the android_set*network LL-NDK APIs.
     * @return status operation status
     */
    @entry
    @callflow(next={"*"})
    createOemNetwork() generates (uint64_t networkHandle, uint32_t packetMark, StatusCode status);

    /**
     * Destroys the specified network previously created using createOemNetwork()
     *
     * @return status operation status
     */
    @exit
    @callflow(next="createOemNetwork")
    destroyOemNetwork(uint64_t networkHandle) generates (StatusCode status);
};
