You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.7 KiB
103 lines
2.7 KiB
/* |
|
* Copyright (C) 2016 The Android Open Source Project |
|
* |
|
* 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. |
|
*/ |
|
|
|
#ifndef PROTOCOL_H_ |
|
#define PROTOCOL_H_ |
|
|
|
#include <cstdint> |
|
|
|
#include "cutils/sockets.h" |
|
|
|
namespace android { |
|
namespace wifilogd { |
|
namespace protocol { |
|
|
|
constexpr char kServiceSocketName[] = "wifilog"; |
|
constexpr char kServiceSocketPath[] = ANDROID_SOCKET_DIR "/wifilog"; |
|
|
|
// SOCK_DGRAM require a contiguous memory allocation [1]. Limit the message |
|
// size to one normal page, to maximize reliability. (This size isn't a |
|
// significant limitation as most messages will be much smaller. We don't |
|
// want to go much smaller, though, as packet-fate blobs may be in the |
|
// neighborhood of 2KB.) |
|
// |
|
// [1] http://stackoverflow.com/a/4822037 |
|
constexpr size_t kMaxMessageSize = 4096; |
|
|
|
enum class Opcode : uint16_t { |
|
kWriteAsciiMessage, |
|
kDumpBuffers = 0x20, |
|
}; |
|
|
|
enum class MessageSeverity : uint8_t { |
|
kError, |
|
kWarning, |
|
kInformational, |
|
kTrace, |
|
kDump, |
|
}; |
|
|
|
struct Command { |
|
Command& set_opcode(Opcode new_opcode) { |
|
opcode = new_opcode; |
|
return *this; |
|
} |
|
|
|
Command& set_payload_len(uint16_t new_payload_len) { |
|
payload_len = new_payload_len; |
|
return *this; |
|
} |
|
|
|
uint64_t src_boottime_nsec; // For latency measurement. |
|
// For drop detection. Sequence numbers are meaningful only within |
|
// the context of a single tag. (This is to minimize synchronization |
|
// requirements for multi-threaded clients.) |
|
uint16_t sequence_num; |
|
Opcode opcode; |
|
uint16_t payload_len; |
|
uint16_t reserved; // Must be zero. |
|
// Payload follows, with content depending on |opcode|. |
|
}; |
|
|
|
struct AsciiMessage { // Old-style log messages. |
|
AsciiMessage& set_data_len(uint16_t new_data_len) { |
|
data_len = new_data_len; |
|
return *this; |
|
} |
|
|
|
AsciiMessage& set_tag_len(uint8_t new_tag_len) { |
|
tag_len = new_tag_len; |
|
return *this; |
|
} |
|
|
|
AsciiMessage& set_severity(MessageSeverity new_severity) { |
|
severity = new_severity; |
|
return *this; |
|
} |
|
|
|
uint16_t data_len; |
|
uint8_t tag_len; |
|
MessageSeverity severity; |
|
// Payload follows. |
|
// uint8_t tag[tag_len]; |
|
// uint8_t data[data_len]; |
|
}; |
|
|
|
} // namespace protocol |
|
} // namespace wifilogd |
|
} // namespace android |
|
|
|
#endif // PROTOCOL_H_
|
|
|