Home | History | Annotate | Download | only in nexus
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <stdlib.h>
     18 #include <string.h>
     19 
     20 #define LOG_TAG "InterfaceConfig"
     21 #include <cutils/log.h>
     22 
     23 #include "InterfaceConfig.h"
     24 #include "NetworkManager.h"
     25 
     26 InterfaceConfig::InterfaceConfig(bool propertiesReadOnly) {
     27     mStaticProperties.propIp = new IPV4AddressPropertyHelper("Addr", propertiesReadOnly, &mIp);
     28     mStaticProperties.propNetmask = new IPV4AddressPropertyHelper("Netmask", propertiesReadOnly, &mNetmask);
     29     mStaticProperties.propGateway = new IPV4AddressPropertyHelper("Gateway", propertiesReadOnly, &mGateway);
     30     mStaticProperties.propBroadcast = new IPV4AddressPropertyHelper("Broadcast", propertiesReadOnly, &mBroadcast);
     31     mStaticProperties.propDns = new InterfaceDnsProperty(this, propertiesReadOnly);
     32 }
     33 
     34 InterfaceConfig::~InterfaceConfig() {
     35     delete mStaticProperties.propIp;
     36     delete mStaticProperties.propNetmask;
     37     delete mStaticProperties.propGateway;
     38     delete mStaticProperties.propBroadcast;
     39     delete mStaticProperties.propDns;
     40 }
     41 
     42 void InterfaceConfig::setIp(struct in_addr *addr) {
     43     memcpy(&mIp, addr, sizeof(struct in_addr));
     44 }
     45 
     46 void InterfaceConfig::setNetmask(struct in_addr *addr) {
     47     memcpy(&mNetmask, addr, sizeof(struct in_addr));
     48 }
     49 
     50 void InterfaceConfig::setGateway(struct in_addr *addr) {
     51     memcpy(&mGateway, addr, sizeof(struct in_addr));
     52 }
     53 
     54 void InterfaceConfig::setBroadcast(struct in_addr *addr) {
     55     memcpy(&mBroadcast, addr, sizeof(struct in_addr));
     56 }
     57 
     58 void InterfaceConfig::setDns(int idx, struct in_addr *addr) {
     59     memcpy(&mDns[idx], addr, sizeof(struct in_addr));
     60 }
     61 
     62 int InterfaceConfig::attachProperties(PropertyManager *pm, const char *nsName) {
     63     pm->attachProperty(nsName, mStaticProperties.propIp);
     64     pm->attachProperty(nsName, mStaticProperties.propNetmask);
     65     pm->attachProperty(nsName, mStaticProperties.propGateway);
     66     pm->attachProperty(nsName, mStaticProperties.propBroadcast);
     67     pm->attachProperty(nsName, mStaticProperties.propDns);
     68     return 0;
     69 }
     70 
     71 int InterfaceConfig::detachProperties(PropertyManager *pm, const char *nsName) {
     72     pm->detachProperty(nsName, mStaticProperties.propIp);
     73     pm->detachProperty(nsName, mStaticProperties.propNetmask);
     74     pm->detachProperty(nsName, mStaticProperties.propGateway);
     75     pm->detachProperty(nsName, mStaticProperties.propBroadcast);
     76     pm->detachProperty(nsName, mStaticProperties.propDns);
     77     return 0;
     78 }
     79 
     80 InterfaceConfig::InterfaceDnsProperty::InterfaceDnsProperty(InterfaceConfig *c,
     81                                                             bool ro) :
     82                  IPV4AddressProperty("Dns", ro, 2) {
     83     mCfg = c;
     84 }
     85 
     86 int InterfaceConfig::InterfaceDnsProperty::set(int idx, struct in_addr *value) {
     87     memcpy(&mCfg->mDns[idx], value, sizeof(struct in_addr));
     88     return 0;
     89 }
     90 int InterfaceConfig::InterfaceDnsProperty::get(int idx, struct in_addr *buf) {
     91     memcpy(buf, &mCfg->mDns[idx], sizeof(struct in_addr));
     92     return 0;
     93 }
     94 
     95