/*
 * 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);
};