// DO NOT EDIT.
// swift-format-ignore-file
// swiftlint:disable all
//
// Generated by the Swift generator plugin for the protocol buffer compiler.
// Source: sdlan_pb.proto
//
// For information on using the generated types, please see the documentation:
//   https://github.com/apple/swift-protobuf/

import Foundation
import SwiftProtobuf

// If the compiler emits an error on this type, it is because this file
// was generated by a version of the `protoc` Swift plug-in that is
// incompatible with the version of SwiftProtobuf to which you are linking.
// Please ensure that you are building against the same version of the API
// that was used to generate this file.
fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck {
  struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {}
  typealias Version = _2
}

struct SDLV4Info: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var port: UInt32 = 0

  var v4: Data = Data()

  var natType: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLV6Info: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var port: UInt32 = 0

  var v6: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLWelcome: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var version: UInt32 = 0

  /// 服务器允许的最大双向流
  var maxBidiStreams: UInt32 = 0

  /// 服务器允许的最大包
  var maxPacketSize: UInt32 = 0

  /// 心跳包的间隔
  var heartbeatSec: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// quic 通讯消息
struct SDLEmpty: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// 这里修改成了扁平的结构, 否则有些字段不好找放的位置
struct SDLRegisterSuper: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var clientID: String = String()

  /// 网络地址信息已经有https请求分配了
  /// 注册的时候需要带上(network_id, mac, ip, mask_len, hostname)
  var networkID: UInt32 = 0

  var mac: Data = Data()

  var ip: UInt32 = 0

  var maskLen: UInt32 = 0

  var hostname: String = String()

  var pubKey: String = String()

  /// 客户端使用http协议请求后端，通过token或者账号密码登录时, 统一返回一个access_token;
  /// RegisterSuper的时候，验证凭证是否合法 (access_token)
  var accessToken: String = String()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// 客户端的升级逻辑，在https的接口里面去完成
/// 部分逻辑会脱离quic去通讯，增加session_token校验
struct SDLRegisterSuperAck: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var aesKey: Data = Data()

  var sessionToken: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLRegisterSuperNak: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var errorCode: UInt32 = 0

  var errorMessage: String = String()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLQueryInfo: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var dstMac: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLPeerInfo: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var dstMac: Data = Data()

  var v4Info: SDLV4Info {
    get {return _v4Info ?? SDLV4Info()}
    set {_v4Info = newValue}
  }
  /// Returns true if `v4Info` has been explicitly set.
  var hasV4Info: Bool {return self._v4Info != nil}
  /// Clears the value of `v4Info`. Subsequent reads from it will return its default value.
  mutating func clearV4Info() {self._v4Info = nil}

  var v6Info: SDLV6Info {
    get {return _v6Info ?? SDLV6Info()}
    set {_v6Info = newValue}
  }
  /// Returns true if `v6Info` has been explicitly set.
  var hasV6Info: Bool {return self._v6Info != nil}
  /// Clears the value of `v6Info`. Subsequent reads from it will return its default value.
  mutating func clearV6Info() {self._v6Info = nil}

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}

  fileprivate var _v4Info: SDLV4Info? = nil
  fileprivate var _v6Info: SDLV6Info? = nil
}

/// ARP查询相关
/// 真实的arp请求是通过广播的形式获取到的，但是针对于macos这种tun的实现；是能够分析出arp请求包的；
/// 对于当前网络来说，服务端是知道mac对应的ip地址的，因此没有必要广播；直接通过服务器端返回
struct SDLArpRequest: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var targetIp: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLArpResponse: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var targetIp: UInt32 = 0

  var targetMac: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// 权限请求查询相关
struct SDLPolicyRequest: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var srcIdentityID: UInt32 = 0

  var dstIdentityID: UInt32 = 0

  var version: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// 基于quic通讯，rules部分已经没有了长度限制
struct SDLPolicyResponse: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var pktID: UInt32 = 0

  var srcIdentityID: UInt32 = 0

  var dstIdentityID: UInt32 = 0

  /// 版本号，客户端需要比较版本号确定是否覆盖; 请求端自己去管理版本号，服务端只是原样回写
  var version: UInt32 = 0

  /// 4+1+2 的稀疏序列化规则
  var rules: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLNatChangedEvent: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var mac: Data = Data()

  var ip: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLSendRegisterEvent: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var dstMac: Data = Data()

  var natIp: UInt32 = 0

  var natPort: UInt32 = 0

  var natType: UInt32 = 0

  var v6Info: SDLV6Info {
    get {return _v6Info ?? SDLV6Info()}
    set {_v6Info = newValue}
  }
  /// Returns true if `v6Info` has been explicitly set.
  var hasV6Info: Bool {return self._v6Info != nil}
  /// Clears the value of `v6Info`. Subsequent reads from it will return its default value.
  mutating func clearV6Info() {self._v6Info = nil}

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}

  fileprivate var _v6Info: SDLV6Info? = nil
}

struct SDLNetworkShutdownEvent: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var message: String = String()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

/// client和stun之间的心跳包，客户端需要和super的udp之间的存活逻辑
struct SDLStunRequest: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var cookie: UInt32 = 0

  var clientID: String = String()

  var networkID: UInt32 = 0

  var mac: Data = Data()

  var ip: UInt32 = 0

  var natType: UInt32 = 0

  var v6Info: SDLV6Info {
    get {return _v6Info ?? SDLV6Info()}
    set {_v6Info = newValue}
  }
  /// Returns true if `v6Info` has been explicitly set.
  var hasV6Info: Bool {return self._v6Info != nil}
  /// Clears the value of `v6Info`. Subsequent reads from it will return its default value.
  mutating func clearV6Info() {self._v6Info = nil}

  var sessionToken: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}

  fileprivate var _v6Info: SDLV6Info? = nil
}

struct SDLStunReply: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var cookie: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLData: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var networkID: UInt32 = 0

  var srcMac: Data = Data()

  var dstMac: Data = Data()

  var isP2P: Bool = false

  var ttl: UInt32 = 0

  var data: Data = Data()

  var sessionToken: Data = Data()

  /// 端通过https登录的时候，服务端会分配该端对应的权限标识
  /// 后续的请求过程中需要带上这个值，对端通过这个值要判断对数据包是否放行
  var identityID: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLStunProbe: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var cookie: UInt32 = 0

  var attr: UInt32 = 0

  /// 增加step是为了方便端上判断，收到的请求和响应之间的映射关系；服务器端原样返回
  var step: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLStunProbeReply: Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var cookie: UInt32 = 0

  /// 增加step是为了方便端上判断，收到的请求和响应之间的映射关系；服务器端原样返回
  var step: UInt32 = 0

  var port: UInt32 = 0

  var ip: UInt32 = 0

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLRegister: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var networkID: UInt32 = 0

  var srcMac: Data = Data()

  var dstMac: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

struct SDLRegisterAck: @unchecked Sendable {
  // SwiftProtobuf.Message conformance is added in an extension below. See the
  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
  // methods supported on all messages.

  var networkID: UInt32 = 0

  var srcMac: Data = Data()

  var dstMac: Data = Data()

  var unknownFields = SwiftProtobuf.UnknownStorage()

  init() {}
}

// MARK: - Code below here is support for the SwiftProtobuf runtime.

extension SDLV4Info: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLV4Info"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "port"),
    2: .same(proto: "v4"),
    3: .standard(proto: "nat_type"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.port) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.v4) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.port != 0 {
      try visitor.visitSingularUInt32Field(value: self.port, fieldNumber: 1)
    }
    if !self.v4.isEmpty {
      try visitor.visitSingularBytesField(value: self.v4, fieldNumber: 2)
    }
    if self.natType != 0 {
      try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLV4Info, rhs: SDLV4Info) -> Bool {
    if lhs.port != rhs.port {return false}
    if lhs.v4 != rhs.v4 {return false}
    if lhs.natType != rhs.natType {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLV6Info: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLV6Info"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "port"),
    2: .same(proto: "v6"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.port) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.v6) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.port != 0 {
      try visitor.visitSingularUInt32Field(value: self.port, fieldNumber: 1)
    }
    if !self.v6.isEmpty {
      try visitor.visitSingularBytesField(value: self.v6, fieldNumber: 2)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLV6Info, rhs: SDLV6Info) -> Bool {
    if lhs.port != rhs.port {return false}
    if lhs.v6 != rhs.v6 {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLWelcome: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLWelcome"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "version"),
    2: .standard(proto: "max_bidi_streams"),
    3: .standard(proto: "max_packet_size"),
    4: .standard(proto: "heartbeat_sec"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.maxBidiStreams) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.maxPacketSize) }()
      case 4: try { try decoder.decodeSingularUInt32Field(value: &self.heartbeatSec) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.version != 0 {
      try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 1)
    }
    if self.maxBidiStreams != 0 {
      try visitor.visitSingularUInt32Field(value: self.maxBidiStreams, fieldNumber: 2)
    }
    if self.maxPacketSize != 0 {
      try visitor.visitSingularUInt32Field(value: self.maxPacketSize, fieldNumber: 3)
    }
    if self.heartbeatSec != 0 {
      try visitor.visitSingularUInt32Field(value: self.heartbeatSec, fieldNumber: 4)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLWelcome, rhs: SDLWelcome) -> Bool {
    if lhs.version != rhs.version {return false}
    if lhs.maxBidiStreams != rhs.maxBidiStreams {return false}
    if lhs.maxPacketSize != rhs.maxPacketSize {return false}
    if lhs.heartbeatSec != rhs.heartbeatSec {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLEmpty: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLEmpty"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLEmpty, rhs: SDLEmpty) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLRegisterSuper"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "client_id"),
    3: .standard(proto: "network_id"),
    4: .same(proto: "mac"),
    5: .same(proto: "ip"),
    6: .standard(proto: "mask_len"),
    7: .same(proto: "hostname"),
    8: .standard(proto: "pub_key"),
    9: .standard(proto: "access_token"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularStringField(value: &self.clientID) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
      case 4: try { try decoder.decodeSingularBytesField(value: &self.mac) }()
      case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
      case 6: try { try decoder.decodeSingularUInt32Field(value: &self.maskLen) }()
      case 7: try { try decoder.decodeSingularStringField(value: &self.hostname) }()
      case 8: try { try decoder.decodeSingularStringField(value: &self.pubKey) }()
      case 9: try { try decoder.decodeSingularStringField(value: &self.accessToken) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if !self.clientID.isEmpty {
      try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 2)
    }
    if self.networkID != 0 {
      try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 3)
    }
    if !self.mac.isEmpty {
      try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 4)
    }
    if self.ip != 0 {
      try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 5)
    }
    if self.maskLen != 0 {
      try visitor.visitSingularUInt32Field(value: self.maskLen, fieldNumber: 6)
    }
    if !self.hostname.isEmpty {
      try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 7)
    }
    if !self.pubKey.isEmpty {
      try visitor.visitSingularStringField(value: self.pubKey, fieldNumber: 8)
    }
    if !self.accessToken.isEmpty {
      try visitor.visitSingularStringField(value: self.accessToken, fieldNumber: 9)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLRegisterSuper, rhs: SDLRegisterSuper) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.clientID != rhs.clientID {return false}
    if lhs.networkID != rhs.networkID {return false}
    if lhs.mac != rhs.mac {return false}
    if lhs.ip != rhs.ip {return false}
    if lhs.maskLen != rhs.maskLen {return false}
    if lhs.hostname != rhs.hostname {return false}
    if lhs.pubKey != rhs.pubKey {return false}
    if lhs.accessToken != rhs.accessToken {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLRegisterSuperAck"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "aes_key"),
    3: .standard(proto: "session_token"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }()
      case 3: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if !self.aesKey.isEmpty {
      try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 2)
    }
    if !self.sessionToken.isEmpty {
      try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLRegisterSuperAck, rhs: SDLRegisterSuperAck) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.aesKey != rhs.aesKey {return false}
    if lhs.sessionToken != rhs.sessionToken {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLRegisterSuperNak"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "error_code"),
    3: .standard(proto: "error_message"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.errorCode) }()
      case 3: try { try decoder.decodeSingularStringField(value: &self.errorMessage) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if self.errorCode != 0 {
      try visitor.visitSingularUInt32Field(value: self.errorCode, fieldNumber: 2)
    }
    if !self.errorMessage.isEmpty {
      try visitor.visitSingularStringField(value: self.errorMessage, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLRegisterSuperNak, rhs: SDLRegisterSuperNak) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.errorCode != rhs.errorCode {return false}
    if lhs.errorMessage != rhs.errorMessage {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLQueryInfo"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "dst_mac"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 2)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLQueryInfo, rhs: SDLQueryInfo) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLPeerInfo"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "dst_mac"),
    3: .standard(proto: "v4_info"),
    4: .standard(proto: "v6_info"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      case 3: try { try decoder.decodeSingularMessageField(value: &self._v4Info) }()
      case 4: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    // The use of inline closures is to circumvent an issue where the compiler
    // allocates stack space for every if/case branch local when no optimizations
    // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
    // https://github.com/apple/swift-protobuf/issues/1182
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 2)
    }
    try { if let v = self._v4Info {
      try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
    } }()
    try { if let v = self._v6Info {
      try visitor.visitSingularMessageField(value: v, fieldNumber: 4)
    } }()
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLPeerInfo, rhs: SDLPeerInfo) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs._v4Info != rhs._v4Info {return false}
    if lhs._v6Info != rhs._v6Info {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLArpRequest"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "target_ip"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if self.targetIp != 0 {
      try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 2)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLArpRequest, rhs: SDLArpRequest) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.targetIp != rhs.targetIp {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLArpResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLArpResponse"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "target_ip"),
    3: .standard(proto: "target_mac"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
      case 3: try { try decoder.decodeSingularBytesField(value: &self.targetMac) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if self.targetIp != 0 {
      try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 2)
    }
    if !self.targetMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.targetMac, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLArpResponse, rhs: SDLArpResponse) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.targetIp != rhs.targetIp {return false}
    if lhs.targetMac != rhs.targetMac {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLPolicyRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLPolicyRequest"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "src_identity_id"),
    3: .standard(proto: "dst_identity_id"),
    4: .same(proto: "version"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
      case 4: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if self.srcIdentityID != 0 {
      try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 2)
    }
    if self.dstIdentityID != 0 {
      try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 3)
    }
    if self.version != 0 {
      try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 4)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLPolicyRequest, rhs: SDLPolicyRequest) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.srcIdentityID != rhs.srcIdentityID {return false}
    if lhs.dstIdentityID != rhs.dstIdentityID {return false}
    if lhs.version != rhs.version {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLPolicyResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLPolicyResponse"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "pkt_id"),
    2: .standard(proto: "src_identity_id"),
    3: .standard(proto: "dst_identity_id"),
    4: .same(proto: "version"),
    5: .same(proto: "rules"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
      case 4: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
      case 5: try { try decoder.decodeSingularBytesField(value: &self.rules) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.pktID != 0 {
      try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
    }
    if self.srcIdentityID != 0 {
      try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 2)
    }
    if self.dstIdentityID != 0 {
      try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 3)
    }
    if self.version != 0 {
      try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 4)
    }
    if !self.rules.isEmpty {
      try visitor.visitSingularBytesField(value: self.rules, fieldNumber: 5)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLPolicyResponse, rhs: SDLPolicyResponse) -> Bool {
    if lhs.pktID != rhs.pktID {return false}
    if lhs.srcIdentityID != rhs.srcIdentityID {return false}
    if lhs.dstIdentityID != rhs.dstIdentityID {return false}
    if lhs.version != rhs.version {return false}
    if lhs.rules != rhs.rules {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLNatChangedEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLNatChangedEvent"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "mac"),
    2: .same(proto: "ip"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularBytesField(value: &self.mac) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if !self.mac.isEmpty {
      try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 1)
    }
    if self.ip != 0 {
      try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 2)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLNatChangedEvent, rhs: SDLNatChangedEvent) -> Bool {
    if lhs.mac != rhs.mac {return false}
    if lhs.ip != rhs.ip {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLSendRegisterEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLSendRegisterEvent"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "dst_mac"),
    2: .standard(proto: "nat_ip"),
    3: .standard(proto: "nat_port"),
    4: .standard(proto: "nat_type"),
    5: .standard(proto: "v6_info"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.natIp) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.natPort) }()
      case 4: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }()
      case 5: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    // The use of inline closures is to circumvent an issue where the compiler
    // allocates stack space for every if/case branch local when no optimizations
    // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
    // https://github.com/apple/swift-protobuf/issues/1182
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1)
    }
    if self.natIp != 0 {
      try visitor.visitSingularUInt32Field(value: self.natIp, fieldNumber: 2)
    }
    if self.natPort != 0 {
      try visitor.visitSingularUInt32Field(value: self.natPort, fieldNumber: 3)
    }
    if self.natType != 0 {
      try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 4)
    }
    try { if let v = self._v6Info {
      try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
    } }()
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLSendRegisterEvent, rhs: SDLSendRegisterEvent) -> Bool {
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs.natIp != rhs.natIp {return false}
    if lhs.natPort != rhs.natPort {return false}
    if lhs.natType != rhs.natType {return false}
    if lhs._v6Info != rhs._v6Info {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLNetworkShutdownEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLNetworkShutdownEvent"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "message"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularStringField(value: &self.message) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if !self.message.isEmpty {
      try visitor.visitSingularStringField(value: self.message, fieldNumber: 1)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLNetworkShutdownEvent, rhs: SDLNetworkShutdownEvent) -> Bool {
    if lhs.message != rhs.message {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLStunRequest"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "cookie"),
    2: .standard(proto: "client_id"),
    3: .standard(proto: "network_id"),
    4: .same(proto: "mac"),
    5: .same(proto: "ip"),
    6: .standard(proto: "nat_type"),
    7: .standard(proto: "v6_info"),
    8: .standard(proto: "session_token"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.cookie) }()
      case 2: try { try decoder.decodeSingularStringField(value: &self.clientID) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
      case 4: try { try decoder.decodeSingularBytesField(value: &self.mac) }()
      case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
      case 6: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }()
      case 7: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
      case 8: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    // The use of inline closures is to circumvent an issue where the compiler
    // allocates stack space for every if/case branch local when no optimizations
    // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
    // https://github.com/apple/swift-protobuf/issues/1182
    if self.cookie != 0 {
      try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1)
    }
    if !self.clientID.isEmpty {
      try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 2)
    }
    if self.networkID != 0 {
      try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 3)
    }
    if !self.mac.isEmpty {
      try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 4)
    }
    if self.ip != 0 {
      try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 5)
    }
    if self.natType != 0 {
      try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 6)
    }
    try { if let v = self._v6Info {
      try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
    } }()
    if !self.sessionToken.isEmpty {
      try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 8)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLStunRequest, rhs: SDLStunRequest) -> Bool {
    if lhs.cookie != rhs.cookie {return false}
    if lhs.clientID != rhs.clientID {return false}
    if lhs.networkID != rhs.networkID {return false}
    if lhs.mac != rhs.mac {return false}
    if lhs.ip != rhs.ip {return false}
    if lhs.natType != rhs.natType {return false}
    if lhs._v6Info != rhs._v6Info {return false}
    if lhs.sessionToken != rhs.sessionToken {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLStunReply: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLStunReply"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "cookie"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.cookie) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.cookie != 0 {
      try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLStunReply, rhs: SDLStunReply) -> Bool {
    if lhs.cookie != rhs.cookie {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLData: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLData"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "network_id"),
    2: .standard(proto: "src_mac"),
    3: .standard(proto: "dst_mac"),
    4: .standard(proto: "is_p2p"),
    5: .same(proto: "ttl"),
    6: .same(proto: "data"),
    7: .standard(proto: "session_token"),
    8: .standard(proto: "identity_id"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.srcMac) }()
      case 3: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      case 4: try { try decoder.decodeSingularBoolField(value: &self.isP2P) }()
      case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ttl) }()
      case 6: try { try decoder.decodeSingularBytesField(value: &self.data) }()
      case 7: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
      case 8: try { try decoder.decodeSingularUInt32Field(value: &self.identityID) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.networkID != 0 {
      try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1)
    }
    if !self.srcMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.srcMac, fieldNumber: 2)
    }
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 3)
    }
    if self.isP2P != false {
      try visitor.visitSingularBoolField(value: self.isP2P, fieldNumber: 4)
    }
    if self.ttl != 0 {
      try visitor.visitSingularUInt32Field(value: self.ttl, fieldNumber: 5)
    }
    if !self.data.isEmpty {
      try visitor.visitSingularBytesField(value: self.data, fieldNumber: 6)
    }
    if !self.sessionToken.isEmpty {
      try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 7)
    }
    if self.identityID != 0 {
      try visitor.visitSingularUInt32Field(value: self.identityID, fieldNumber: 8)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLData, rhs: SDLData) -> Bool {
    if lhs.networkID != rhs.networkID {return false}
    if lhs.srcMac != rhs.srcMac {return false}
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs.isP2P != rhs.isP2P {return false}
    if lhs.ttl != rhs.ttl {return false}
    if lhs.data != rhs.data {return false}
    if lhs.sessionToken != rhs.sessionToken {return false}
    if lhs.identityID != rhs.identityID {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLStunProbe: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLStunProbe"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "cookie"),
    2: .same(proto: "attr"),
    3: .same(proto: "step"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.cookie) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.attr) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.step) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.cookie != 0 {
      try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1)
    }
    if self.attr != 0 {
      try visitor.visitSingularUInt32Field(value: self.attr, fieldNumber: 2)
    }
    if self.step != 0 {
      try visitor.visitSingularUInt32Field(value: self.step, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLStunProbe, rhs: SDLStunProbe) -> Bool {
    if lhs.cookie != rhs.cookie {return false}
    if lhs.attr != rhs.attr {return false}
    if lhs.step != rhs.step {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLStunProbeReply: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLStunProbeReply"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .same(proto: "cookie"),
    2: .same(proto: "step"),
    3: .same(proto: "port"),
    4: .same(proto: "ip"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.cookie) }()
      case 2: try { try decoder.decodeSingularUInt32Field(value: &self.step) }()
      case 3: try { try decoder.decodeSingularUInt32Field(value: &self.port) }()
      case 4: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.cookie != 0 {
      try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1)
    }
    if self.step != 0 {
      try visitor.visitSingularUInt32Field(value: self.step, fieldNumber: 2)
    }
    if self.port != 0 {
      try visitor.visitSingularUInt32Field(value: self.port, fieldNumber: 3)
    }
    if self.ip != 0 {
      try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 4)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLStunProbeReply, rhs: SDLStunProbeReply) -> Bool {
    if lhs.cookie != rhs.cookie {return false}
    if lhs.step != rhs.step {return false}
    if lhs.port != rhs.port {return false}
    if lhs.ip != rhs.ip {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLRegister: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLRegister"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "network_id"),
    2: .standard(proto: "src_mac"),
    3: .standard(proto: "dst_mac"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.srcMac) }()
      case 3: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.networkID != 0 {
      try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1)
    }
    if !self.srcMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.srcMac, fieldNumber: 2)
    }
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLRegister, rhs: SDLRegister) -> Bool {
    if lhs.networkID != rhs.networkID {return false}
    if lhs.srcMac != rhs.srcMac {return false}
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}

extension SDLRegisterAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
  static let protoMessageName: String = "SDLRegisterAck"
  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
    1: .standard(proto: "network_id"),
    2: .standard(proto: "src_mac"),
    3: .standard(proto: "dst_mac"),
  ]

  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
    while let fieldNumber = try decoder.nextFieldNumber() {
      // The use of inline closures is to circumvent an issue where the compiler
      // allocates stack space for every case branch when no optimizations are
      // enabled. https://github.com/apple/swift-protobuf/issues/1034
      switch fieldNumber {
      case 1: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
      case 2: try { try decoder.decodeSingularBytesField(value: &self.srcMac) }()
      case 3: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
      default: break
      }
    }
  }

  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
    if self.networkID != 0 {
      try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1)
    }
    if !self.srcMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.srcMac, fieldNumber: 2)
    }
    if !self.dstMac.isEmpty {
      try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 3)
    }
    try unknownFields.traverse(visitor: &visitor)
  }

  static func ==(lhs: SDLRegisterAck, rhs: SDLRegisterAck) -> Bool {
    if lhs.networkID != rhs.networkID {return false}
    if lhs.srcMac != rhs.srcMac {return false}
    if lhs.dstMac != rhs.dstMac {return false}
    if lhs.unknownFields != rhs.unknownFields {return false}
    return true
  }
}
