16193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline/* 26193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Copyright (C) 2015 The Android Open Source Project 36193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * 46193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Licensed under the Apache License, Version 2.0 (the "License"); 56193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * you may not use this file except in compliance with the License. 66193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * You may obtain a copy of the License at 76193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * 86193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * http://www.apache.org/licenses/LICENSE-2.0 96193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * 106193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Unless required by applicable law or agreed to in writing, software 116193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * distributed under the License is distributed on an "AS IS" BASIS, 126193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * See the License for the specific language governing permissions and 146193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * limitations under the License. 156193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline */ 166193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 176193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klinepackage android.net.netlink; 186193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 196193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport android.net.netlink.StructNlMsgHdr; 206193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport android.net.netlink.NetlinkMessage; 216193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 226193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport java.nio.ByteBuffer; 236193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 246193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 256193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline/** 266193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * A NetlinkMessage subclass for netlink error messages. 276193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * 286193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * @hide 296193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline */ 306193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klinepublic class NetlinkErrorMessage extends NetlinkMessage { 316193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 326193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline public static NetlinkErrorMessage parse(StructNlMsgHdr header, ByteBuffer byteBuffer) { 336193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline final NetlinkErrorMessage errorMsg = new NetlinkErrorMessage(header); 346193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 356193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline errorMsg.mNlMsgErr = StructNlMsgErr.parse(byteBuffer); 366193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline if (errorMsg.mNlMsgErr == null) { 376193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline return null; 386193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline } 396193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 406193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline return errorMsg; 416193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline } 426193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 436193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline private StructNlMsgErr mNlMsgErr; 446193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 456193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline NetlinkErrorMessage(StructNlMsgHdr header) { 466193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline super(header); 476193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline mNlMsgErr = null; 486193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline } 496193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 506193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline public StructNlMsgErr getNlMsgError() { 516193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline return mNlMsgErr; 526193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline } 536193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline 546193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline @Override 556193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline public String toString() { 566193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline return "NetlinkErrorMessage{ " 576193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline + "nlmsghdr{" + (mHeader == null ? "" : mHeader.toString()) + "}, " 586193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline + "nlmsgerr{" + (mNlMsgErr == null ? "" : mNlMsgErr.toString()) + "} " 596193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline + "}"; 606193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline } 616193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline} 62