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 #ifndef _NETLINKEVENT_H 17 #define _NETLINKEVENT_H 18 19 #include <sysutils/NetlinkListener.h> 20 21 #define NL_PARAMS_MAX 32 22 23 class NetlinkEvent { 24 int mSeq; 25 char *mPath; 26 int mAction; 27 char *mSubsystem; 28 char *mParams[NL_PARAMS_MAX]; 29 30 public: 31 const static int NlActionUnknown; 32 const static int NlActionAdd; 33 const static int NlActionRemove; 34 const static int NlActionChange; 35 const static int NlActionLinkDown; 36 const static int NlActionLinkUp; 37 const static int NlActionAddressUpdated; 38 const static int NlActionAddressRemoved; 39 40 NetlinkEvent(); 41 virtual ~NetlinkEvent(); 42 43 bool decode(char *buffer, int size, int format = NetlinkListener::NETLINK_FORMAT_ASCII); 44 const char *findParam(const char *paramName); 45 46 const char *getSubsystem() { return mSubsystem; } 47 int getAction() { return mAction; } 48 49 void dump(); 50 51 protected: 52 bool parseIfAddrMessage(int type, struct ifaddrmsg *ifaddr, int rtasize); 53 bool parseBinaryNetlinkMessage(char *buffer, int size); 54 bool parseAsciiNetlinkMessage(char *buffer, int size); 55 }; 56 57 #endif 58