In need of a good retreat from the city lights and endless traffic, to be transported to a world of turquoise calm waters, golden sunsets and white Maldivian sand?
Here's a few reasons on why Maldives is one of the top places in Asia for that yoga and wellness retreat, to recharge, rejuvenate and renew your mind. Clear all the stress, cleanse your body with fresh sea breeze and detox with the fresh fruit and coconuts found on this island.
Need a Maldives yoga retreat to rejuvenate the soul?
Feel the gentle sun rays glowing on your skin as you gently move into the various stretches/ moves over here at the spa. Great workout to get the pulse beating and a nice rosy morning glow. This is best experienced with a nice cup of ginger tea after which and a nice dip into the nearby beach to cool off, relax the back muscles and catch some Maldives stunning beach and marine life.
We had the honour to have yoga guru Tara Stiles conduct a few sessions of Yoga at W Maldives, and one of which was a lovely morning exotic yoga session on a private island Gaathafushi 10 minutes by speedboat from W Maldives. You can't find this yoga experience easily available at other yoga popular places like India and Bali.
Stunning view and crimson skies as the sun rise into the skies. The good yoga workout was then ended off with a delicious champagne breakfast and lovely array of fruit and fresh bakes, with your feet dip into the water.
Yoga with a view like that, what's not to love?
White sandy beaches just make all the pictures look so stunning. When practising yoga, it is important not to strain your body or over stretch. We are always told repeatedly to relax our back, relax our shoulders and breathe.
Skies of crimson pink at sunset, perfect for yogi photos!
A picturesque destination for the best photos with the crystal clear water and golden sunset. How can one resist striking a pose when you can capture the most glorious silhouette yoga pictures and shots here in Maldives.
So what are you waiting for Yogis? Whisk over to the Maldives and zen into this island life of white soft sand and turquoise beauty. You will surely return to your city life recharged and ready to conquer the world.
How lucky are you to have enjoyed such a lovely experience? You've inspired me to do a yoga retreat next time I am in The Maldives.
What an amazing experience… are you able to share how you came across finding a suitable yoga retreat. I'm headed there this summer and want to do the same.
Hi Manroop! Yes, the Maldives is a beautiful destination to do a yoga retreat. In the article, I mentioned a few hotels in that caters very well to people who love yoga and would like to get a good recharge. I hope it was helpful and do let me know how the retreat goes!
Didn't know one can do a yoga retreat in the Maldives!
Yes, its the perfect destination for it Chuen Buan, serene, peaceful and the cool summer breeze all around.
Thanks Lydia – I heard about Yoshie from Yoga Lab doing Yoga retreat in Amilla Fushi in May 2019, are you aware?


text:
UB to celebrate summer with UB on the Green
Members of the UB and University District communities gather on the Hayes Hall lawn for a UB on the Green concert. Photo: Ariel Namoca
UBNOW STAFF
"Each year the series provides fun opportunities to bring the campus and community together. "
Tess Morrissey, director
Office of Community Relations
UB on the Green, UB's free outdoor performance series, is back for an 11th season of music and activities celebrating summer in the South Campus neighborhood.
The family-friendly, alcohol-free events, presented by the Office of Community Relations, will take place from 6-8 p.m. July 19 and July 26 on the Hayes Hall lawn on the South Campus. Free parking is available in the NFTA Park and Ride and Townsend lots. Spectators are encouraged to bring a picnic meal, lawn chairs and blankets. Refreshments from food trucks will be available for sale.
"It's great to have UB on the Green back for another year," says Tess Morrissey, UB director of community relations. "Each year the series provides fun opportunities to bring the campus and community together."
In addition to musical performances, each night's events will focus around a specific theme designed to welcome neighbors to the university and introduce them to different aspects of UB.
The theme on July 19 is "Care Fair Night," with activities dedicated to health in the community. Free health screenings will be provided by UBMD, the School of Nursing and the School of Dental Medicine, along with health and wellness information, and fun activities for the kids. Music will be provided by Randle and the Late Night Scandals.
July 26 is "Experience UB Night" and attendees can learn what UB and the University District has to offer. UB departments and schools and community groups will leading fun and interactive presentations. The Kenny Hawkins All Star Band will perform.
For more information, visit the UB and You website.

redpajama_set_name: RedPajamaCommonCrawl


AVer Video Conference Player allows you to view recorded meeting sessions.
A program that will capture other people video window and save that video window to avi format.
JetCom's videoconference can conduct high quality videoconference meetings.
Video Conferencing without collaboration is like a video without audio.
Record any video chat and group video chat (video conference) with ease.
Create videos of your on-screen activities with this program.
Test the stability and performance of your video card with this program.
It is an IP-based H.323 multi-party standalone video conferencing software.
Falco Watcher is a useful program for communication and video conference.
It is video conference client for SIP server compatible with WebSocket.
Creates video conference with 3 participants seeing each others.
A free-to-use video-conference connection service.
Video projector is an essential equipment for contemporary conference.
Use the softphone to make Audio, Audio & Video call and conference.
ReelPortal is an easy-to-use video chat and conference system.
Extend video conferencing from conference rooms to desktops, laptops.


text:
/**********************************************************************
   Copyright [2014] [Cisco Systems, Inc.]

   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: cosa_ip_apis_multilan.c

    For Data Model SBAPI Implementation,
    Common Component Software Platform (CCSP)

    ---------------------------------------------------------------

    description:

        The APIs servicing TR-181 data model IP Interface SBAPI
        integration are implemented in this file.

    ---------------------------------------------------------------

    environment:

        Platform Independent, but with multi-LAN support

    ---------------------------------------------------------------

    author:

        Ding Hua

    ---------------------------------------------------------------

    revision:

        02/28/2013  initial revision.

**********************************************************************/

#include "cosa_apis.h"
#include "cosa_ip_apis_multilan.h"
#include "ccsp_psm_helper.h"
#include "cosa_dhcpv6_apis.h"
#include "cosa_drg_common.h"

#include "linux/if.h"
#include "linux/sockios.h"
#include <sys/ioctl.h>
#include "safec_lib_common.h"

/**********************************************************************
                            HELPER FUNCTIONS
**********************************************************************/
COSA_DML_IF_STATUS getIfStatus(const PUCHAR name, struct ifreq *pIfr);

/**********************************************************************
                            MAIN ROUTINES
**********************************************************************/

ANSC_STATUS
CosaDmlIpMlanInit
    (
        ANSC_HANDLE                 hDml,
        PANSC_HANDLE                phContext
    )
{
    UNREFERENCED_PARAMETER(hDml);
    PDMSB_TR181_IP_CONTEXT          pIpContext     = NULL;

    AnscTraceWarning(("CosaDmlIpMlanInit...\n"));

    pIpContext = (PDMSB_TR181_IP_CONTEXT)AnscAllocateMemory(sizeof(DMSB_TR181_IP_CONTEXT));

    if ( pIpContext )
    {
        DMSB_TR181_IP_CONTEXT_Init(pIpContext);

        *phContext = (ANSC_HANDLE)pIpContext;
        return  ANSC_STATUS_SUCCESS;
    }
    else
    {
        return  ANSC_STATUS_RESOURCES;
    }

    /* Need the Unload function to free allocated context */
}

/*
 *  Utility routines
 */
PDMSB_TR181_IP_IF
CosaDmlIpIfMlanFindByInstNum
    (
        PDMSB_TR181_IP_CONTEXT      pIpContext,
        ULONG                       ulInstNum
    )
{
    PSINGLE_LINK_ENTRY              pSLinkEntry;
    PDMSB_TR181_IP_IF               pIpIf;

    pSLinkEntry = AnscSListGetFirstEntry(&pIpContext->IpIfList);

    while ( pSLinkEntry )
    {
        pIpIf    = ACCESS_DMSB_TR181_IP_IF(pSLinkEntry);
        pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry);

        if ( pIpIf->Cfg.InstanceNumber == ulInstNum )
        {
            return  pIpIf;
        }
    }

    AnscTraceWarning(("%s -- failed to find %lu!\n", __FUNCTION__, ulInstNum));

    return  NULL;
}

ANSC_STATUS
CosaDmlIpIfMlanLoadPsm
    (
        PDMSB_TR181_IP_CONTEXT      pIpContext
    )
{
    int                             iReturnValue    = CCSP_SUCCESS;
    int                             iNumInst        = 0;
    int*                            pInstArray      = NULL;
    ULONG                           ulIndex;
    PDMSB_TR181_IP_IF               pIpIf           = NULL;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    ULONG                           ulL2netInst     = 0;
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    iReturnValue =
        PsmGetNextLevelInstances
            (
                g_MessageBusHandle,
                g_SubsystemPrefix,
                DMSB_TR181_PSM_l3net_Root,
                (unsigned int *)&iNumInst,
                (unsigned int **)&pInstArray
            );

    if ( iReturnValue != CCSP_SUCCESS )
    {
        AnscTraceWarning(("%s -- PsmGetNextLevelInstances failed, error code = %d!\n", __FUNCTION__, iReturnValue));
        goto  EXIT;
    }

    for ( ulIndex = 0; (int)ulIndex < iNumInst; ulIndex++ )
    {
        pIpIf = (PDMSB_TR181_IP_IF)AnscAllocateMemory(sizeof(DMSB_TR181_IP_IF));

        if ( !pIpIf )
        {
            AnscTraceWarning(("%s -- insufficient resources, IpIf instance %lu\n", __FUNCTION__, ulIndex));
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pIpIf->Cfg.InstanceNumber = pInstArray[ulIndex];
        }

        /* Fetch Cfg */

        if ( TRUE )     /* Enable */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_Enable,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_boolean)
            {
                pIpIf->Cfg.bEnabled = SlapValue.Variant.varBool;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.bEnabled = (strcmp(SlapValue.Variant.varString, "true") == 0);
            }

            SlapCleanVariable(&SlapValue);
        }

        if ( TRUE )     /* Alias */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_Alias,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
              ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else
            {
                rc = strcpy_s(pIpIf->Cfg.Alias, sizeof(pIpIf->Cfg.Alias), SlapValue.Variant.varString);
                if(rc != EOK)
                {
                   ERR_CHK(rc);
                }
            }

            SlapCleanVariable(&SlapValue);
        }

        if ( TRUE )     /* MaxMTU */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_MaxMTU,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_unsignedInt)
            {
                pIpIf->Cfg.MaxMTUSize = SlapValue.Variant.varUint32;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.MaxMTUSize = _ansc_atoi(SlapValue.Variant.varString);
            }

            SlapCleanVariable(&SlapValue);
        }

        if ( TRUE )     /* AutoIPEnable */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_AutoIPEnable,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_boolean)
            {
                pIpIf->Cfg.AutoIPEnable = SlapValue.Variant.varBool;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.AutoIPEnable = (strcmp(SlapValue.Variant.varString, "true") == 0);
            }

            SlapCleanVariable(&SlapValue);
        }

        if ( TRUE )     /* ArpCacheTimeout */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_ArpCacheTimeout,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_unsignedInt)
            {
                pIpIf->Cfg.ArpCacheTimeout = SlapValue.Variant.varUint32;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.ArpCacheTimeout = _ansc_atoi(SlapValue.Variant.varString);
            }

            SlapCleanVariable(&SlapValue);
        }

        if ( TRUE )     /* UPnPIGDEnabled */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_UpnpIgdEnabled,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_boolean)
            {
                pIpIf->Cfg.UpnpIgdEnabled = SlapValue.Variant.varBool;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.UpnpIgdEnabled = (strcmp(SlapValue.Variant.varString, "true") == 0);
            }

            SlapCleanVariable(&SlapValue);
        }
#if defined (MULTILAN_FEATURE)
        if ( TRUE )     /* IPv6Enable */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_IPv6Enable,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
              ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else
            {
                pIpIf->Cfg.bIPv6Enabled = (strcmp(SlapValue.Variant.varString, "true") == 0);
            }

            SlapCleanVariable(&SlapValue);
        }
#endif
        if ( TRUE )     /* EthLink */
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                    pInstArray[ulIndex]
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_unsignedInt)
            {
                pIpIf->Cfg.LinkInstNum = SlapValue.Variant.varUint32;
            }
            else if (RecordType == ccsp_string)
            {
                pIpIf->Cfg.LinkInstNum = _ansc_atoi(SlapValue.Variant.varString);
            }

            SlapCleanVariable(&SlapValue);

            /* LinkType is always EthLink for now */
            pIpIf->Cfg.LinkType = COSA_DML_LINK_TYPE_EthLink;
        }

        /*
         *  Fetch the "l2net" parameter from l3net PSM object
         */
        if ( pIpIf->Cfg.LinkInstNum )
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_EthLink_Root DMSB_TR181_PSM_EthLink_i DMSB_TR181_PSM_EthLink_l2net,
                    (int)pIpIf->Cfg.LinkInstNum
                );
            if(rc < EOK)
            {
               ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) )
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else if (RecordType == ccsp_unsignedInt)
            {
                ulL2netInst = SlapValue.Variant.varUint32;
            }
            else if (RecordType == ccsp_string)
            {
                ulL2netInst = _ansc_atoi(SlapValue.Variant.varString);
            }

            SlapCleanVariable(&SlapValue);
        }

        /*
         *  Fetch the "name" parameter from l2net PSM object
         */
        if ( ulL2netInst )
        {
            SlapInitVariable(&SlapValue);

            rc = sprintf_s
                (
                    pParamPath,
                    sizeof(pParamPath),
                    DMSB_TR181_PSM_l2net_Root DMSB_TR181_PSM_l2net_i DMSB_TR181_PSM_l2net_name,
                    (int)ulL2netInst
                );
            if(rc < EOK)
            {
                ERR_CHK(rc);
            }

            iReturnValue =
                PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );

            if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
            {
                AnscTraceWarning
                    ((
                        "%s -- failed to retrieve the parameter %s, error code %d, type %d\n",
                        __FUNCTION__,
                        pParamPath,
                        iReturnValue,
                        RecordType
                    ));
            }
            else
            {
                rc = strcpy_s(pIpIf->Info.Name, sizeof(pIpIf->Info.Name), SlapValue.Variant.varString);
                if(rc != EOK)
                {
                  ERR_CHK(rc);
                }

                rc = strcpy_s(pIpIf->Cfg.LinkName, sizeof(pIpIf->Cfg.LinkName), pIpIf->Info.Name);
                if(rc != EOK)
                {
                   ERR_CHK(rc);
                }
            }

            SlapCleanVariable(&SlapValue);
        }

        /* Fetch Info */
        pIpIf->Info.LastChange = AnscGetTickInSeconds();

        /* Fill in other predetermined info */
        pIpIf->Cfg.IfType = COSA_DML_IP_IF_TYPE_Normal;

        AnscSListPushEntryAtBack(&pIpContext->IpIfList, &pIpIf->Linkage);
    }

EXIT:
    if ( pInstArray )
    {
        AnscFreeMemory(pInstArray);
        pInstArray = NULL;
    }

    return  iReturnValue;
}

ANSC_STATUS
CosaDmlIpIfMlanSavePsm
    (
        PDMSB_TR181_IP_CONTEXT      pIpContext,
        PCOSA_DML_IP_IF_CFG         pCfg
    )
{
    UNREFERENCED_PARAMETER(pIpContext);
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = ccsp_string;
    char                            RecordValue[64] = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( TRUE )     /* Enable */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_Enable,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        RecordType = ccsp_boolean;
        rc = strcpy_s(RecordValue, sizeof(RecordValue),(pCfg->bEnabled ? PSM_TRUE : PSM_FALSE));
        if(rc != EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    if ( TRUE )     /* Alias */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_Alias,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        RecordType = ccsp_string;
        rc = strcpy_s(RecordValue,sizeof(RecordValue), pCfg->Alias);
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    if ( TRUE )     /* MaxMTU */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_MaxMTU,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_unsignedInt;
        rc = sprintf_s(RecordValue,sizeof(RecordValue), "%lu", pCfg->MaxMTUSize);
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    if ( TRUE )     /* AutoIPEnable */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_AutoIPEnable,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_boolean;
        rc = strcpy_s(RecordValue, sizeof(RecordValue), (pCfg->AutoIPEnable ? PSM_TRUE : PSM_FALSE));
        if(rc != EOK)
        {
           ERR_CHK(rc);
        }
        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    if ( TRUE )     /* ArpCacheTimeout */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_ArpCacheTimeout,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_unsignedInt;
        rc = sprintf_s(RecordValue, sizeof(RecordValue), "%lu", pCfg->ArpCacheTimeout);
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    if ( TRUE )     /* UPnPIGDEnabled */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_UpnpIgdEnabled,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_boolean;
        rc = strcpy_s(RecordValue, sizeof(RecordValue),(pCfg->UpnpIgdEnabled ? PSM_TRUE : PSM_FALSE));
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }
        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }
#if defined (MULTILAN_FEATURE)
    if ( TRUE )     /* IPv6Enable */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_IPv6Enable,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_string;
        rc = strcpy_s(RecordValue, sizeof(RecordValue), (pCfg->bIPv6Enabled ? "true" : "false"));
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }
#endif
    if ( TRUE )     /* EthLink */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_unsignedInt;
        rc = sprintf_s(RecordValue, sizeof(RecordValue), "%lu", pCfg->LinkInstNum);
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning
                ((
                    "%s -- failed to set the parameter %s, error code %d, type %d, value %s.\n",
                    __FUNCTION__,
                    pParamPath,
                    iReturnValue,
                    RecordType,
                    RecordValue
                ));
        }
    }

    return  CCSP_SUCCESS;
}

ANSC_STATUS
CosaDmlIpIfMlanDelPsm
    (
        PDMSB_TR181_IP_CONTEXT      pIpContext,
        PCOSA_DML_IP_IF_CFG         pCfg
    )
{
    UNREFERENCED_PARAMETER(pIpContext);
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( TRUE )     /* Enable */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i,
                (int)pCfg->InstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Del_Record
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning(("%s -- failed to delete PSM records, error code %d", __FUNCTION__, iReturnValue));
        }
    }

    return  CCSP_SUCCESS;
}

ULONG
CosaDmlIpIfMlanGetNumberOfEntries
    (
        ANSC_HANDLE                 hContext
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext      = (PDMSB_TR181_IP_CONTEXT )hContext;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( !pIpContext->IpIfInit )
    {
        CosaDmlIpIfMlanLoadPsm(pIpContext);
        pIpContext->IpIfInit = TRUE;
    }

    return  AnscSListQueryDepth(&pIpContext->IpIfList);
}

ANSC_STATUS
CosaDmlIpIfMlanGetEntry
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIndex,
        PCOSA_DML_IP_IF_FULL        pEntry
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PSINGLE_LINK_ENTRY              pSLinkEntry;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( !pEntry )
    {
        return ANSC_STATUS_FAILURE;
    }

    if ( ulIndex < AnscSListQueryDepth(&pIpContext->IpIfList) )
    {
        pSLinkEntry = AnscSListGetEntryByIndex(&pIpContext->IpIfList, ulIndex);

        if ( pSLinkEntry )
        {
            pIpIf = ACCESS_DMSB_TR181_IP_IF(pSLinkEntry);

            AnscCopyMemory(&pEntry->Cfg, &pIpIf->Cfg, sizeof(pIpIf->Cfg));
            AnscCopyMemory(&pEntry->Info, &pIpIf->Info, sizeof(pIpIf->Info));

            pEntry->Info.Status = getIfStatus((PUCHAR)pIpIf->Info.Name, NULL);

            return  ANSC_STATUS_SUCCESS;
        }
        else
        {
            return  ANSC_STATUS_CANT_FIND;
        }
    }
    else
    {
        return ANSC_STATUS_FAILURE;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanSetValues
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIndex,
        ULONG                       ulInstanceNumber,
        char*                       pAlias
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PSINGLE_LINK_ENTRY              pSLinkEntry;
    PDMSB_TR181_IP_IF               pIpIf;
    errno_t                         rc             = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pSLinkEntry = AnscSListGetEntryByIndex(&pIpContext->IpIfList, ulIndex);

    if ( pSLinkEntry )
    {
        pIpIf = ACCESS_DMSB_TR181_IP_IF(pSLinkEntry);

        /* Instance number cannot be changed! */
        rc = strcpy_s(pIpIf->Cfg.Alias, sizeof(pIpIf->Cfg.Alias), pAlias);
        if(rc != EOK)
        {
          ERR_CHK(rc);
          return ANSC_STATUS_FAILURE;
        }

        CosaDmlIpIfMlanSavePsm(pIpContext, &pIpIf->Cfg);
    }
    else
    {
        AnscTraceWarning
            ((
                "%s -- cannot find the interface, index = %lu, InstanceNumber = %lu, alias = '%s'\n",
                __FUNCTION__,
                ulIndex,
                ulInstanceNumber,
                pAlias
            ));

        return  ANSC_STATUS_CANT_FIND;
    }
    return  ANSC_STATUS_SUCCESS;

}

ANSC_STATUS
CosaDmlIpIfMlanAddEntry
    (
        ANSC_HANDLE                 hContext,
        PCOSA_DML_IP_IF_FULL        pEntry
    )
{
    int                             iReturnValue    = CCSP_SUCCESS;
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;
    errno_t                         rc             = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( !pEntry )
    {
        return ANSC_STATUS_FAILURE;
    }
    else
    {
        pIpIf = (PDMSB_TR181_IP_IF)AnscAllocateMemory(sizeof(DMSB_TR181_IP_IF));

        if ( !pIpIf )
        {
            AnscTraceWarning(("%s -- insufficient resources, IpIf instance %lu\n", __FUNCTION__, pEntry->Cfg.InstanceNumber));
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            AnscCopyMemory(&pIpIf->Cfg,        &pEntry->Cfg,        sizeof(pIpIf->Cfg));
            AnscCopyMemory(&pIpIf->Info, &pEntry->Info, sizeof(pIpIf->Info));

            if ( pIpIf->Cfg.LinkInstNum )
            {
                char                            pParamPath[64]  = {0};
                unsigned int                    RecordType      = 0;
                SLAP_VARIABLE                   SlapValue       = {0};
#if defined (MULTILAN_FEATURE)
                ULONG                           ulL2netInst     = 0;
#endif
#if defined (MULTILAN_FEATURE)
                /*
                 *  Fetch the EthLink Instance from PSM
		*/
#else
		/*
                 *  Fetch the "name" parameter from l2net PSM object
		*/
#endif
                SlapInitVariable(&SlapValue);

                rc = sprintf_s
                 (
                     pParamPath,
                     sizeof(pParamPath),
#if defined (MULTILAN_FEATURE)
                     DMSB_TR181_PSM_EthLink_Root DMSB_TR181_PSM_EthLink_i DMSB_TR181_PSM_EthLink_l2net,
#else
		     DMSB_TR181_PSM_l2net_Root DMSB_TR181_PSM_l2net_i DMSB_TR181_PSM_l2net_name,
#endif
                    (int)pIpIf->Cfg.LinkInstNum
                  );
                if(rc < EOK)
                {
                   ERR_CHK(rc);
                }

                iReturnValue =
                   PSM_Get_Record_Value
                    (
                        g_MessageBusHandle,
                        g_SubsystemPrefix,
                        pParamPath,
                        &RecordType,
                        &SlapValue
                    );
#if defined (MULTILAN_FEATURE)
                if ( (iReturnValue != CCSP_SUCCESS) )
#else
                if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
#endif
                {
#if defined (MULTILAN_FEATURE)
                    AnscTraceWarning
                    (("%s -- failed to retrieve the parameter %s, error code %d, type %d\n",__FUNCTION__,pParamPath,iReturnValue,RecordType));
#else
		    AnscTraceWarning(("%s -- failed to retrieve 'l2net.name' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
#endif
                }
#if defined (MULTILAN_FEATURE)
                else if (RecordType == ccsp_unsignedInt)
                {
                    ulL2netInst = SlapValue.Variant.varUint32;
                }
                else if (RecordType == ccsp_string)
                {
                    ulL2netInst = _ansc_atoi(SlapValue.Variant.varString);
#else
                else
                {
                    rc = strcpy_s(pIpIf->Info.Name, sizeof(pIpIf->Info.Name), SlapValue.Variant.varString);
                    if(rc != EOK)
                    {
                       ERR_CHK(rc);
                    }
#endif
                }

                SlapCleanVariable(&SlapValue);
#if defined (MULTILAN_FEATURE)
                /*
                 *  Fetch the "name" parameter from l2net PSM object
                 */
                if ( ulL2netInst )
                {
                    SlapInitVariable(&SlapValue);

                    rc = sprintf_s
                      (
                          pParamPath,
                          sizeof(pParamPath),
                          DMSB_TR181_PSM_l2net_Root DMSB_TR181_PSM_l2net_i DMSB_TR181_PSM_l2net_name,
                          (int)ulL2netInst
                      );
                    if(rc < EOK)
                    {
                      ERR_CHK(rc);
                    }

                    iReturnValue =
                      PSM_Get_Record_Value
                      (
                          g_MessageBusHandle,
                          g_SubsystemPrefix,
                          pParamPath,
                          &RecordType,
                          &SlapValue
                      );

                    if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
                    {
                        AnscTraceWarning(("%s -- failed to retrieve the parameter %s, error code %d, type %d\n",__FUNCTION__,pParamPath,iReturnValue,RecordType));
                    }
			        else
                    {
                        rc = strcpy_s(pIpIf->Info.Name, sizeof(pIpIf->Info.Name), SlapValue.Variant.varString);
                        if(rc != EOK)
                        {
                          ERR_CHK(rc);
                        }
                        rc = strcpy_s(pIpIf->Cfg.LinkName, sizeof(pIpIf->Cfg.LinkName), pIpIf->Info.Name);
                        if(rc != EOK)
                        {
                           ERR_CHK(rc);
                        }
                        rc = STRCPY_S_NOCLOBBER(pEntry->Info.Name, sizeof(pEntry->Info.Name), pIpIf->Info.Name);
                        if(rc != EOK)
                        {
                           ERR_CHK(rc);
                        }
                    }

                    SlapCleanVariable(&SlapValue);
                }
#endif
            }

            pEntry->Info.Status    = getIfStatus((PUCHAR)pIpIf->Info.Name, NULL);
            pIpIf->Info.LastChange = AnscGetTickInSeconds();

            AnscSListPushEntryAtBack(&pIpContext->IpIfList, &pIpIf->Linkage);

            CosaDmlIpIfMlanSavePsm(pIpContext, &pIpIf->Cfg);

            TR181_Mlan_Sysevent_ResyncAll();
        }
    }
    return  ANSC_STATUS_SUCCESS;

}

ANSC_STATUS
CosaDmlIpIfMlanDelEntry
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulInstanceNumber
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, ulInstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        CosaDmlIpIfMlanDelPsm(pIpContext, &pIpIf->Cfg);

        TR181_Mlan_Sysevent_ResyncAll();

        AnscSListPopEntryByLink(&pIpContext->IpIfList, &pIpIf->Linkage);
        AnscFreeMemory(pIpIf);

        return  ANSC_STATUS_SUCCESS;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanSetCfg
    (
        ANSC_HANDLE                 hContext,
        PCOSA_DML_IP_IF_CFG         pCfg
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;
    errno_t                         rc             = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, pCfg->InstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        struct ifreq                ifr;
		COSA_DML_IF_STATUS enifStatus = COSA_DML_IF_STATUS_Unknown;

        /* Save the configuraton */
        AnscCopyMemory(&pIpIf->Cfg, pCfg, sizeof(pIpIf->Cfg));
        CosaDmlIpIfMlanSavePsm(pIpContext, &pIpIf->Cfg);

        TR181_Mlan_Sysevent_Resync((int)pIpIf->Cfg.InstanceNumber);
#if defined (MULTILAN_FEATURE)
        commonSyseventSet("ipv6-restart", "");
#endif

        /* Update the name -- just copy LinkName to Name field */
        rc = strcpy_s(pIpIf->Info.Name, sizeof(pIpIf->Info.Name), pCfg->LinkName);
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }

        /*
         *  Reset stats
         */
		enifStatus = getIfStatus((PUCHAR)pIpIf->Info.Name, &ifr);

		if ( ( enifStatus == COSA_DML_IF_STATUS_Unknown ) || \
			 ( enifStatus == COSA_DML_IF_STATUS_NotPresent )
			)
		{
			return ANSC_STATUS_FAILURE;
		}

        if ( pCfg->bEnabled && !(pIpIf->Cfg.bEnabled) && !(ifr.ifr_flags & IFF_UP) )
        {
            ifr.ifr_flags |= IFF_UP;

            /*
             *  Comment out the set function for now
             *
            if ( setIfStatus(&ifr) )
            {
                return ANSC_STATUS_FAILURE;
            }
             */

            pIpIf->Info.LastChange = AnscGetTickInSeconds();
            CosaUtilGetIfStats(pIpIf->Info.Name, &pIpIf->LastStats);
        }
        else if ( !(pCfg->bEnabled) && pIpIf->Cfg.bEnabled )
        {
            ifr.ifr_flags &= ~IFF_UP;

            /*
             *  Comment out the set function for now
             *
            if ( setIfStatus(&ifr) )
            {
                return ANSC_STATUS_FAILURE;
            }
             */

            pIpIf->Info.LastChange = AnscGetTickInSeconds();
            CosaUtilGetIfStats(pIpIf->Info.Name, &pIpIf->LastStats);
        }

        return  ANSC_STATUS_SUCCESS;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanGetCfg
    (
        ANSC_HANDLE                 hContext,
        PCOSA_DML_IP_IF_CFG         pCfg
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, pCfg->InstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        AnscCopyMemory(pCfg, &pIpIf->Cfg, sizeof(pIpIf->Cfg));

        return  ANSC_STATUS_SUCCESS;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanGetInfo
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulInstanceNumber,
        PCOSA_DML_IP_IF_INFO        pInfo
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, ulInstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        pInfo->Status       = getIfStatus((PUCHAR)pIpIf->Info.Name, NULL);

        return  ANSC_STATUS_SUCCESS;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanReset
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulInstanceNumber
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, ulInstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        TR181_Mlan_Sysevent_Resync((int)ulInstanceNumber);

        return  ANSC_STATUS_SUCCESS;
    }
}

/*
 *  IP Interface IPv4Address
 */
ULONG
CosaDmlIpIfMlanGetNumberOfV4Addrs
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    /* Always 1 */
    return  1;
}

ANSC_STATUS
CosaDmlIpIfMlanGetIPv4Addr
    (
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the IPv4Addr
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4Addr,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4Addr' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->IPAddress.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    return  ANSC_STATUS_SUCCESS;
}

ANSC_STATUS
CosaDmlIpIfMlanGetSubnetMask
    (
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the Subnet Mask
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4SubnetMask,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4SubnetMask' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->SubnetMask.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    return  ANSC_STATUS_SUCCESS;
}

ANSC_STATUS
CosaDmlIpIfMlanGetV4Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        ULONG                       ulIndex,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    if ( ulIndex != 0 )
    {
        /* 1 instance only -- index has to be zero */
        return  ANSC_STATUS_UNAPPLICABLE;
    }

    /*
     *  Retrieve the IPv4Addr
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4Addr,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4Addr' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->IPAddress.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    /*
     *  Retrieve the Subnet Mask
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4SubnetMask,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4SubnetMask' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->SubnetMask.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    /*
     *  Fill other fields
     */
    if ( TRUE )
    {
        pEntry->InstanceNumber  = 1;
        rc = sprintf_s(pEntry->Alias, sizeof(pEntry->Alias) , "%lu", pEntry->InstanceNumber);
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }
        pEntry->bEnabled        = TRUE;
        pEntry->Status          = COSA_DML_IP_ADDR_STATUS_Enabled;
        pEntry->AddressingType  = COSA_DML_IP_ADDR_TYPE_Static;

        return  ANSC_STATUS_SUCCESS;
    }
}

ANSC_STATUS
CosaDmlIpIfMlanSetV4AddrValues
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        ULONG                       ulIndex,
        ULONG                       ulInstanceNumber,
        char*                       pAlias
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIndex);
    UNREFERENCED_PARAMETER(ulInstanceNumber);
    UNREFERENCED_PARAMETER(pAlias);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    /*
     *  We don't need to set the instance number
     *  Alias cannot be changed, so do nothing here
     */
    return  ANSC_STATUS_SUCCESS;
}

ANSC_STATUS
CosaDmlIpIfMlanAddV4Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
#if defined (MULTILAN_FEATURE)
   /*
    * This function is called only when the first instance is created
    */
    pEntry->InstanceNumber = 1;
    pEntry->AddressingType = COSA_DML_IP_ADDR_TYPE_Static;
    return  ANSC_STATUS_SUCCESS;
#else
    /* Add/Del V4/V6 address is not supported */
    return  ANSC_STATUS_UNAPPLICABLE;
#endif
}

ANSC_STATUS
CosaDmlIpIfMlanDelV4Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /* Add/Del V4/V6 address is not supported */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanSetV4Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = ccsp_string;
    char                            RecordValue[64] = {0};
    errno_t                         rc              = -1;

    if ( pEntry->InstanceNumber != 1 )
    {
        /* 1 instance only -- index has to be zero */
        return  ANSC_STATUS_UNAPPLICABLE;
    }

    AnscTraceFlow
        ((
            "%s -- instance number %lu, address %u.%u.%u.%u, subnet mask %u.%u.%u.%u\n",
            __FUNCTION__,
            ulIpIfInstanceNumber,
            pEntry->IPAddress.Dot[0], pEntry->IPAddress.Dot[1],
            pEntry->IPAddress.Dot[2], pEntry->IPAddress.Dot[3],
            pEntry->SubnetMask.Dot[0], pEntry->SubnetMask.Dot[1],
            pEntry->SubnetMask.Dot[2], pEntry->SubnetMask.Dot[3]
        ));

    /*
     *  Only saves the parameters below
     */
    if ( TRUE )     /* V4Addr */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4Addr,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_string;
        rc = strcpy_s(RecordValue, sizeof(RecordValue), _ansc_inet_ntoa(*((struct in_addr*)pEntry->IPAddress.Dot)));
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }
        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning(("%s -- failed to set 'V4Addr' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
    }

    if ( TRUE )     /* V4SubnetMask */
    {
        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4SubnetMask,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        RecordType = ccsp_string;
        rc = strcpy_s(RecordValue, sizeof(RecordValue), _ansc_inet_ntoa(*((struct in_addr*)pEntry->SubnetMask.Dot)));
        if(rc != EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Set_Record_Value2
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    RecordType,
                    RecordValue
                );

        if ( iReturnValue != CCSP_SUCCESS )
        {
            AnscTraceWarning(("%s -- failed to set 'V4Addr' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
    }

    TR181_Mlan_Sysevent_Resync((int)ulIpIfInstanceNumber);

    return  ANSC_STATUS_SUCCESS;
}

ANSC_STATUS
CosaDmlIpIfMlanGetV4Addr2
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V4ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    errno_t                         rc              = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the IPv4Addr
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4Addr,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4Addr' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->IPAddress.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    /*
     *  Retrieve the Subnet Mask
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_V4SubnetMask,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_string))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'V4SubnetMask' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            pEntry->SubnetMask.Value = _ansc_inet_addr(SlapValue.Variant.varString);
        }

        SlapCleanVariable(&SlapValue);
    }

    /*
     *  Fill other fields
     */
    if ( TRUE )
    {
        pEntry->InstanceNumber  = 1;
        rc = sprintf_s(pEntry->Alias, sizeof(pEntry->Alias), "%lu", pEntry->InstanceNumber);
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }
        pEntry->bEnabled        = TRUE;
        pEntry->Status          = COSA_DML_IP_ADDR_STATUS_Enabled;
        pEntry->AddressingType  = COSA_DML_IP_ADDR_TYPE_Static;

        return  ANSC_STATUS_SUCCESS;
    }
}

/*
 *  IP Interface IPv6Address
 */
ANSC_STATUS
CosaDmlIpIfMlanAddV6Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /* Add/Del V4/V6 address is not supported */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanDelV6Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /* Add/Del V4/V6 address is not supported */
    return  ANSC_STATUS_FAILURE;
}

ANSC_STATUS
CosaDmlIpIfMlanSetV6Addr
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanGetV6Addr2
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6ADDR         pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
#if defined (MULTILAN_FEATURE)
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    unsigned int                    l2_instnum = 0;
    unsigned int                    ethlink_instnum = 0;
    char                            evt_name[64] = {0};
    char                            evt_value[64] = {0};
    char                            out[32] = {0};
    errno_t                         rc      = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the EthLink
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'EthLink' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            ethlink_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);

        /*
         *  Retrieve the l2 Instance of bridgee
         */
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_EthLink_Root DMSB_TR181_PSM_EthLink_i DMSB_TR181_PSM_EthLink_l2net,
                ethlink_instnum
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'l2net' instance, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType))
        }
        else
        {
            l2_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);
    }

    if (l2_instnum) {
        snprintf(evt_name, sizeof(evt_name), "multinet_%d-name", l2_instnum);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));

        rc = sprintf_s(evt_name, sizeof(evt_name), "ipv6_%s-addr", evt_value);
        if(rc < EOK)   ERR_CHK(rc);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));
        if (evt_value[0] != '\0') {
            strncpy(pEntry->IP6Address, evt_value, sizeof(pEntry->IP6Address));
            pEntry->bEnabled = TRUE;
            pEntry->Status = COSA_DML_IP_ADDR_STATUS_Enabled;
            pEntry->V6Status = COSA_DML_IP6_ADDRSTATUS_Preferred;
            pEntry->Origin = COSA_DML_IP6_ORIGIN_AutoConfigured;
            pEntry->bAnycast = FALSE;

            _ansc_snprintf( pEntry->Alias, sizeof(pEntry->Alias), "cpe-address-%lu", pEntry->InstanceNumber );

            /*life time*/
            if (!commonSyseventGet(COSA_DML_DHCPV6C_ADDR_PRETM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iana_pretm = atoi(out);
            else
                pEntry->iana_pretm = 0;

            if (!commonSyseventGet(COSA_DML_DHCPV6C_ADDR_VLDTM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iana_vldtm = atoi(out);
            else
                pEntry->iana_vldtm = 0;
        }

    }
    return  ANSC_STATUS_SUCCESS;
#else
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    unsigned int                    l2_instnum = 0;
    char                            evt_name[64] = {0};
    char                            evt_value[64] = {0};
    char                            out[32] = {0};
    errno_t                         rc      = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the EthLink
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'EthLink' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            l2_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);
    }

    if (l2_instnum) {
        snprintf(evt_name, sizeof(evt_name), "multinet_%d-name", l2_instnum);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));

        rc = sprintf_s(evt_name, sizeof(evt_name), "ipv6_%s-addr", evt_value);
        if(rc < EOK)  ERR_CHK(rc);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));
        if (evt_value[0] != '\0') {
            strncpy(pEntry->IP6Address, evt_value, sizeof(pEntry->IP6Address));
            pEntry->bEnabled = TRUE;
            pEntry->Status = COSA_DML_IP_ADDR_STATUS_Enabled;
            pEntry->V6Status = COSA_DML_IP6_ADDRSTATUS_Preferred;
            pEntry->Origin = COSA_DML_IP6_ORIGIN_AutoConfigured;
            pEntry->bAnycast = FALSE;

            /*life time*/
            if (!commonSyseventGet(COSA_DML_DHCPV6C_ADDR_PRETM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iana_pretm = atoi(out);
            else
                pEntry->iana_pretm = 0;

            if (!commonSyseventGet(COSA_DML_DHCPV6C_ADDR_VLDTM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iana_vldtm = atoi(out);
            else
                pEntry->iana_vldtm = 0;
        }

    }
    return  ANSC_STATUS_SUCCESS;
#else
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;

#endif
#endif

}

ANSC_STATUS
CosaDmlIpIfMlanAddV6Prefix
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6PREFIX       pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanDelV6Prefix
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6PREFIX       pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanSetV6Prefix
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6PREFIX       pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;
}

ANSC_STATUS
CosaDmlIpIfMlanGetV6Prefix2
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_V6PREFIX       pEntry
    )
{
    UNREFERENCED_PARAMETER(hContext);
    UNREFERENCED_PARAMETER(ulIpIfInstanceNumber);
    UNREFERENCED_PARAMETER(pEntry);
#if defined (MULTILAN_FEATURE)
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    unsigned int                    l2_instnum = 0;
    unsigned int                    ethlink_instnum = 0;
    char                            evt_name[64] = {0};
    char                            evt_value[64] = {0};
    char                            out[32] = {0};
    errno_t                         rc      = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the EthLink
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'EthLink' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            ethlink_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);

        /*
         *  Retrieve the l2 Instance of bridgee
         */
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_EthLink_Root DMSB_TR181_PSM_EthLink_i DMSB_TR181_PSM_EthLink_l2net,
                ethlink_instnum
            );
        if(rc < EOK)
        {
           ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'l2net' instance, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType))
        }
        else
        {
            l2_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);
    }

    if (l2_instnum) {
        snprintf(evt_name, sizeof(evt_name), "multinet_%d-name", l2_instnum);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));

        rc = sprintf_s(evt_name, sizeof(evt_name), "ipv6_%s-prefix", evt_value);
        if(rc < EOK)   ERR_CHK(rc);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));
        if (evt_value[0] != '\0') {
            strncpy(pEntry->Prefix, evt_value, sizeof(pEntry->Prefix));
            pEntry->bEnabled = TRUE;
            pEntry->Status = COSA_DML_PREFIXENTRY_STATUS_Enabled;
            pEntry->PrefixStatus = COSA_DML_IP6PREFIX_STATUS_Preferred;
            pEntry->Origin = COSA_DML_IP6PREFIX_ORIGIN_Child;
            pEntry->StaticType = COSA_DML_IP6PREFIX_STATICTYPE_Inapplicable;
            /*always set these 2 fields to TRUE*/
            pEntry->bOnlink = TRUE;
            pEntry->bAutonomous = TRUE;

            _ansc_snprintf( pEntry->Alias, sizeof(pEntry->Alias), "cpe-prefix-%lu", pEntry->InstanceNumber );

            /*life time*/
            if (!commonSyseventGet(COSA_DML_DHCPV6C_PREF_PRETM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iapd_pretm = atoi(out);
            else
                pEntry->iapd_pretm = 0;

            if (!commonSyseventGet(COSA_DML_DHCPV6C_PREF_VLDTM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iapd_vldtm = atoi(out);
            else
                pEntry->iapd_vldtm = 0;
        }
    }

    return  ANSC_STATUS_SUCCESS;
#else
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
    int                             iReturnValue    = CCSP_SUCCESS;
    char                            pParamPath[64]  = {0};
    unsigned int                    RecordType      = 0;
    SLAP_VARIABLE                   SlapValue       = {0};
    unsigned int                    l2_instnum = 0;
    char                            evt_name[64] = {0};
    char                            evt_value[64] = {0};
    char                            out[32] = {0};
    errno_t                         rc      = -1;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    /*
     *  Retrieve the EthLink
     */
    if ( ulIpIfInstanceNumber )
    {
        SlapInitVariable(&SlapValue);

        rc = sprintf_s
            (
                pParamPath,
                sizeof(pParamPath),
                DMSB_TR181_PSM_l3net_Root DMSB_TR181_PSM_l3net_i DMSB_TR181_PSM_l3net_EthLink,
                (int)ulIpIfInstanceNumber
            );
        if(rc < EOK)
        {
          ERR_CHK(rc);
        }

        iReturnValue =
            PSM_Get_Record_Value
                (
                    g_MessageBusHandle,
                    g_SubsystemPrefix,
                    pParamPath,
                    &RecordType,
                    &SlapValue
                );

        if ( (iReturnValue != CCSP_SUCCESS) || (RecordType != ccsp_unsignedInt))
        {
            AnscTraceWarning(("%s -- failed to retrieve 'EthLink' parameter, error code %d, type %d\n", __FUNCTION__, iReturnValue, RecordType));
        }
        else
        {
            l2_instnum = SlapValue.Variant.varUint32;
        }

        SlapCleanVariable(&SlapValue);
    }

    if (l2_instnum) {
        snprintf(evt_name, sizeof(evt_name), "multinet_%d-name", l2_instnum);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));

        rc = sprintf_s(evt_name, sizeof(evt_name), "ipv6_%s-prefix", evt_value);
        if(rc < EOK)  ERR_CHK(rc);
        commonSyseventGet(evt_name, evt_value, sizeof(evt_value));
        if (evt_value[0] != '\0') {
            strncpy(pEntry->Prefix, evt_value, sizeof(pEntry->Prefix));
            pEntry->bEnabled = TRUE;
            pEntry->Status = COSA_DML_PREFIXENTRY_STATUS_Enabled;
            pEntry->PrefixStatus = COSA_DML_IP6PREFIX_STATUS_Preferred;
            pEntry->Origin = COSA_DML_IP6PREFIX_ORIGIN_Child;
            pEntry->StaticType = COSA_DML_IP6PREFIX_STATICTYPE_Inapplicable;
            /*always set these 2 fields to TRUE*/
            pEntry->bOnlink = TRUE;
            pEntry->bAutonomous = TRUE;

            /*life time*/
            if (!commonSyseventGet(COSA_DML_DHCPV6C_PREF_PRETM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iapd_pretm = atoi(out);
            else
                pEntry->iapd_pretm = 0;

            if (!commonSyseventGet(COSA_DML_DHCPV6C_PREF_VLDTM_SYSEVENT_NAME, out, sizeof(out)) )
                pEntry->iapd_vldtm = atoi(out);
            else
                pEntry->iapd_vldtm = 0;
        }
    }

    return  ANSC_STATUS_SUCCESS;
#else
    /*
     *  No IPv6 support for Multi-LAN at the moment
     *  It should not have got here at all!
     */
    return  ANSC_STATUS_UNAPPLICABLE;

#endif
#endif
}

/*
 *  IP Interface statistics
 */
ANSC_STATUS
CosaDmlIpIfMlanGetStats
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIpIfInstanceNumber,
        PCOSA_DML_IP_STATS          pStats
    )
{
    PDMSB_TR181_IP_CONTEXT          pIpContext     = (PDMSB_TR181_IP_CONTEXT)hContext;
    PDMSB_TR181_IP_IF               pIpIf;

    AnscTraceFlow(("%s...\n", __FUNCTION__));

    pIpIf = CosaDmlIpIfMlanFindByInstNum(pIpContext, ulIpIfInstanceNumber);

    if ( !pIpIf )
    {
        return  ANSC_STATUS_CANT_FIND;
    }
    else
    {
        _ansc_memset(pStats, 0, sizeof(*pStats));

        CosaUtilGetIfStats(pIpIf->Info.Name, (PCOSA_DML_IF_STATS)pStats);

        pStats->BroadcastPacketsReceived    -= pIpIf->LastStats.BroadcastPacketsReceived;
        pStats->BroadcastPacketsSent        -= pIpIf->LastStats.BroadcastPacketsSent;
        pStats->BytesReceived               -= pIpIf->LastStats.BytesReceived;
        pStats->BytesSent                   -= pIpIf->LastStats.BytesSent;
        pStats->DiscardPacketsReceived      -= pIpIf->LastStats.DiscardPacketsReceived;
        pStats->DiscardPacketsSent          -= pIpIf->LastStats.DiscardPacketsSent;
        pStats->ErrorsReceived              -= pIpIf->LastStats.ErrorsReceived;
        pStats->ErrorsSent                  -= pIpIf->LastStats.ErrorsSent;
        pStats->MulticastPacketsReceived    -= pIpIf->LastStats.MulticastPacketsReceived;
        pStats->MulticastPacketsSent        -= pIpIf->LastStats.MulticastPacketsSent;
        pStats->PacketsReceived             -= pIpIf->LastStats.PacketsReceived;
        pStats->PacketsSent                 -= pIpIf->LastStats.PacketsSent;
        pStats->UnicastPacketsReceived      -= pIpIf->LastStats.UnicastPacketsReceived;
        pStats->UnicastPacketsSent          -= pIpIf->LastStats.UnicastPacketsSent;
        pStats->UnknownProtoPacketsReceived -= pIpIf->LastStats.UnknownProtoPacketsReceived;

        AnscTraceFlow(("%s done!\n", __FUNCTION__));

        return ANSC_STATUS_SUCCESS;
    }
}

redpajama_set_name: RedPajamaGithub


text:
Fiction / Non-Fiction
Extended Format
Show Large Print: Yes No Only
Books published by Auteur Publishing
Where? Books » Publisher » Auteur Publishing
Total 152 jump to: go ‹ previous...34567...next ›
Studying Hammer Horror (Paperback)
By Walden, Victoria G.
When Hammer Productions was formed in the 1920s, no one foresaw the impact this small, independent studio would have on the international film market. Christopher Lee's mesmerizing, animalistic, yet gentlemanly performance as Dracula, Frankenstein's Monster, and the Mummy were ce...lebrated worldwide, and the Byronic qualities of Peter Cushing's Dr. Frankenstein, among his many other Hammer characters, proved impossible to forget. Hammer maintained consistant period settings, creating a timeless and enchanting aesthetic. Studying Hammer Horror treats Hammer as a quintessentially British product and through a study of its work investigates larger conceptions of national horror cinemas. The book examines genre, auteur theory, stardom, and representation within case studies of Curse of Frankenstein (1957), Twins of Evil (1971), and Hammer's latest film, Beyond the Rave (2008), and weighs Hammer's impact on the British film industry, past and present. Intended for students, fans, and general readers, this book transcends superficial preconceptions of Hammer horror in order to reach the essence of Hammer.
Released AU
Auteur Publishing
Indent title (internationally sourced), usually ships 4-6 weeks
Studying Disaster Movies (Paperback)
By Sanders, John
The disaster film taps into our fear of events beyond our control, ones that are often rooted in real-life experience, making the genre a particularly potent mixture of entertainment and grounded events. Studying Disaster Films provides a comprehensive introduction to a sub-genre... that has flourished since the 1970s, fully accounting for the genre's origins and focusing on key films, including Airport, The Towering Inferno, The Day After Tomorrow, and, most recently, Cloverfield, Each case study presents a complete examination of the film, covering production, distribution, and marketing, and tackles such major critical areas as close textual analysis of scenes, issues of representation, and critical reaction. Within this context, The Day After Tomorrow and Cloverfield are examined as products of current moral panics. There is also a consideration of reality disaster films, such as United 93, Written in a lively manner, this volume synthesizes central film and media concepts, affording the reader a thorough overview of the sub-genre.
Title is temporarily out of stock
School & Public Library Accounts - please log in
Action/Adventure Films - Classroom Resources (Paperback, New title)
By McInnes, Rob
Featuring a combination of teacher's notes, classroom worksheets, a glossary of terms and a useful 'webography' of internet web sites to support the teaching of this genre, this work features sheets that cover the key concepts of Media and Film Studies and also includes a 'Critic...al Issues and Debates' section.
Teacher's Guides and Classroom Resources
Doing Text - Media After the Subject (Hardback)
By Bennett, Pete; McDougall, Julian
This collection re-imagines the study of English and media in a way that decentralises the text (e.g. romantic poetry or film noir) or media formats/platforms (e.g. broadcast media/new media). Instead, the authors work across boundaries in meaningful thematic contexts that reflec...t the ways in which people engage with reading, watching, making, and listening in their textual lives. In so doing, this project recasts both subjects as combined in a more reflexive, critical space for the study of our everyday social and cultural interactions. Across the chapters, the authors present applicable learning and teaching strategies that weave together art works, films, social practices, creativity, 'viral' media, theater, TV, social media, videogames, and literature. The culmination of this range of strategies is a reclaimed 'blue skies' approach to progressive textual education, free from constraining shackles of outdated ideas about textual categories and value that have hitherto alienated generations of students and both English and media from themselves.
Action/Adventure Films - A Teacher`s Guide (Trade Paperback / Paperback, 2nd edition)
What an impressive pack! This Teacher's Guide is comprehensive, rigorously underpinned with theoretical perspectives and informed debate, and extensively illustrated with detailed textual examples. Well-conceived, researched, and designed, this will be a valuable and much-used re...source. & mdash;Jenny Grahame, English and Media Centre, LondonThe action/adventure is the dominant genre of American cinema and has been for close to three decades. Yet despite being wildly popular with its target audience, action/adventure is, at best, critically neglected and, at worst, dismissed as a giveaway to undiscerning viewers. In this new edition of the acclaimed Teacher's Guide and Classroom Resources, Rob McInnes returns with his vivid engagement of the topic, going into even greater depth than other available resources. His text now references films released in the past twelve months and opens with a reassessment of traditional approaches to teaching the genre. The Teacher's Guide reviews action/adventure narrative, formal conventions, issues of representation, institutional practices, and critical debates, especially those relating to propaganda and censorship. The accompanying Classroom Resources provides photocopiable sheets for teaching the topic and covers key theoretical issues plus guidelines for practical tasks, such as storyboarding, producing a film trailer, and designing a movie poster. The pack also includes an extensive glossary.
The Film Genre Book (Paperback)
A comprehensive introduction to film history, The Film Genre Book allows the reader to create their own narrative of film through history by focusing on seven genres, highlighting a key film from each genre over a ninety-year period -- 63 films discussed in detail. The reader can... trace the developments in a particular genre over time or compare films in a particular decade from the different genres. Each case-study considers issues of historical context, representation and the close textual analysis of significant scenes. Analysing films as diverse as Bambi and Pan's Labyrinth, the book immerses its reader into the full range of film experience. Its breadth of study, and the way in which it bridges the gap between commercial film guides and academic studies, makes it invaluable to teacher, student and cineaste alike.
Studying British Cinema: 1990s (Hardback)
By Dyja, Eddie
British cinema in the 1990s was a decade of contradictions. This book examines the fragile revival in British film fortunes by taking a detailed analysis of 20 films made during the 1990s.
Splice: Volume 5, Issue 3 (Trade Paperback / Paperback)
Edited by Atkinson, John
Splice bridges the gap between contemporary cinema and intelligent discourse. Facilitating the study of contemporary cinema, it offers a practical solution for teachers and students of film studies, media studies, and related disciplines. The innaugural issue of Volume 5 focuses ...on remakes, especially what goes into a quality production and why they are so relentlessly pursued today. Are retreads even worth studying? Topics discussed include the return of 1970s and 1980s horror films, such as Halloween (2007) and A Nightmare on Elm Street (2010), and the similarities and differences between dueling versions of The Day the Earth Stood Still and Alfie.
Adults / General
Availability and pricing is uncertain (no recent updates from publisher)
Studying French Cinema (Trade Paperback / Paperback)
By Vanderschelden, Isabelle
In Stock At Publisher
Adopting a textual approach, with an emphasis on recent popular films, Studying French Cinema is geared toward nonspecialists studying French and film studies, as well as the general reader who might be interested in postwar French cinema. Each chapter focuses on one or more key ...films, from the groundbreaking output of the Nouvelle Vague ( Les 400 coups, 1959) to contemporary documentaries ( Etre et avoir, 2002) and situates these works within explorations of childhood, adolescence, and coming of age; auteur ideology and individual style; the representation of recent French history; aesthetic approaches; transnational production practices; and popular cinema, comedy, and gender issues. Taken together, this history provides a fresh perspective on postwar French history and points readers toward further study of related films.
In stock at publisher; ships 6-12 working days
Beyond Hammer - British Horror Cinema Since 1970 (Paperback)
By Rose, James
Critically neglected after the decline of Hammer Studios, the British horror film remains a significant and steadily growing body of genre works within a nationally grounded cinema. This book looks at British horror cinema since 1970.
Index by Publisher Name
Des Hunt
John Marsden
Linda Chapman
Firm Sale
Internationally Sourced
Listed in Childrens & Adults
Issues In SocietySA Ebook Premier's Reading ChallengeChallenge Level Reception to Year 2Activities & GamesAudiobookChildren's and EducationalFiction (Child / Teen)First ReadersForeign LanguageHeinemann-RaintreeLanguage & LiteratureLearning ResourcesNon-Fiction (Child / Teen)Picture BooksPlayscripts (Kids / Teens)ReferenceVIC Ebook Premier's Reading Challenge
Adults & General Audience
Biography & AutobiographyComputing and Information TechnologyEarth Sciences, Geography, Environment, PlanningEconomics, Finance, Business, IndustryEnglish Language Teaching (ELT)Family, Home & Self HelpFiction (Adult)History, Philosophy & ReligionLanguage & LiteratureLanguages other than English
Reference, Information & Interdisciplinary
Sport, Travel & Leisure
Technology, Engineering & Agriculture
Wheelers Books Australia