1168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat/* 2168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Copyright (C) 2008 The Android Open Source Project 3168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 4168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 5168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * you may not use this file except in compliance with the License. 6168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * You may obtain a copy of the License at 7168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 8168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * http://www.apache.org/licenses/LICENSE-2.0 9168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 10168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Unless required by applicable law or agreed to in writing, software 11168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * distributed under the License is distributed on an "AS IS" BASIS, 12168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * See the License for the specific language governing permissions and 14168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * limitations under the License. 15168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat */ 16168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#ifndef _NETLINKEVENT_H 17168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#define _NETLINKEVENT_H 18168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 1917260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen#include <sysutils/NetlinkListener.h> 2017260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen 21168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#define NL_PARAMS_MAX 32 22168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 23168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatclass NetlinkEvent { 24168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat int mSeq; 25168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mPath; 26168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat int mAction; 27168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mSubsystem; 28168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat char *mParams[NL_PARAMS_MAX]; 29168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 30168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatpublic: 31168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const static int NlActionUnknown; 32168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const static int NlActionAdd; 33168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const static int NlActionRemove; 34168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const static int NlActionChange; 35ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen const static int NlActionLinkDown; 36ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen const static int NlActionLinkUp; 37f34861346d5c207912075fba9874090e4c947869Lorenzo Colitti const static int NlActionAddressUpdated; 38f34861346d5c207912075fba9874090e4c947869Lorenzo Colitti const static int NlActionAddressRemoved; 39b185e90dcc6ac111bff908edcc6d89fd6b37dc11Lorenzo Colitti const static int NlActionRdnss; 40d7ff7ea65220718398cae1e1aa0005072229b4e7Lorenzo Colitti const static int NlActionRouteUpdated; 41d7ff7ea65220718398cae1e1aa0005072229b4e7Lorenzo Colitti const static int NlActionRouteRemoved; 42168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 43168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat NetlinkEvent(); 44168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat virtual ~NetlinkEvent(); 45168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 4617260b14682d4fe59dad3de2de8c9370e6ba9a71Mike J. Chen bool decode(char *buffer, int size, int format = NetlinkListener::NETLINK_FORMAT_ASCII); 47168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const char *findParam(const char *paramName); 48168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 49168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat const char *getSubsystem() { return mSubsystem; } 50168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat int getAction() { return mAction; } 51d674413ff460afe1da049e54bb7a489132799749San Mehat 52d674413ff460afe1da049e54bb7a489132799749San Mehat void dump(); 53ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen 54ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen protected: 55ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen bool parseBinaryNetlinkMessage(char *buffer, int size); 56ec16b9d47cacb0d873ee0ff80c919f49215c0005Mike J. Chen bool parseAsciiNetlinkMessage(char *buffer, int size); 579b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseIfInfoMessage(const struct nlmsghdr *nh); 589b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseIfAddrMessage(const struct nlmsghdr *nh); 599b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseUlogPacketMessage(const struct nlmsghdr *nh); 60d7ff7ea65220718398cae1e1aa0005072229b4e7Lorenzo Colitti bool parseRtMessage(const struct nlmsghdr *nh); 619b34293566833ead1d7bac7518e5ccad0d92d61cLorenzo Colitti bool parseNdUserOptMessage(const struct nlmsghdr *nh); 62168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat}; 63168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 64168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#endif 65