Files
meshstream/generated/meshtastic/paxcount.pb.go
T
Daniel Pupius e8e1a112ab feat(topology): track mesh node connections and render as map polylines
Add passive topology tracking from four sources with confidence ranking:
- Zero-hop MQTT observations (continuous, per-gateway, highest frequency)
- Traceroute replies (RouteDiscovery, full path + SNR data)
- NeighborInfo packets (self-reported neighbor SNR)
- relay_node inferred links (1-hop packets with known relay)

Backend: add rx_snr (field 62) and rx_rssi (field 63) to meshstream Data
proto; extract from MeshPacket in decoder.go; regenerate Go bindings.

Frontend:
- topologySlice: LinkObservation model, per-direction confidence merge,
  24h TTL pruning, 2000-edge cap, Redux-pure (timestamp from payload)
- aggregatorSlice: add hopsFromGateway to NodeData
- __root.tsx: dispatch processTopologyPacket after each SSE message
- NetworkMap: render polylines colored by SNR (green/yellow/red/gray),
  dimmed at 0.4 opacity for viaMqtt edges; Links toggle button in legend
- NodeDetail: Connections section showing per-edge SNR, source badge,
  viaMqtt badge, and last-seen time

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-15 16:43:48 +00:00

147 lines
4.3 KiB
Go

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
// protoc v4.25.1
// source: meshtastic/paxcount.proto
package meshtastic
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// TODO: REPLACE
type Paxcount struct {
state protoimpl.MessageState `protogen:"open.v1"`
// seen Wifi devices
Wifi uint32 `protobuf:"varint,1,opt,name=wifi,proto3" json:"wifi,omitempty"`
// Seen BLE devices
Ble uint32 `protobuf:"varint,2,opt,name=ble,proto3" json:"ble,omitempty"`
// Uptime in seconds
Uptime uint32 `protobuf:"varint,3,opt,name=uptime,proto3" json:"uptime,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Paxcount) Reset() {
*x = Paxcount{}
mi := &file_meshtastic_paxcount_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Paxcount) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Paxcount) ProtoMessage() {}
func (x *Paxcount) ProtoReflect() protoreflect.Message {
mi := &file_meshtastic_paxcount_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Paxcount.ProtoReflect.Descriptor instead.
func (*Paxcount) Descriptor() ([]byte, []int) {
return file_meshtastic_paxcount_proto_rawDescGZIP(), []int{0}
}
func (x *Paxcount) GetWifi() uint32 {
if x != nil {
return x.Wifi
}
return 0
}
func (x *Paxcount) GetBle() uint32 {
if x != nil {
return x.Ble
}
return 0
}
func (x *Paxcount) GetUptime() uint32 {
if x != nil {
return x.Uptime
}
return 0
}
var File_meshtastic_paxcount_proto protoreflect.FileDescriptor
const file_meshtastic_paxcount_proto_rawDesc = "" +
"\n" +
"\x19meshtastic/paxcount.proto\x12\n" +
"meshtastic\"H\n" +
"\bPaxcount\x12\x12\n" +
"\x04wifi\x18\x01 \x01(\rR\x04wifi\x12\x10\n" +
"\x03ble\x18\x02 \x01(\rR\x03ble\x12\x16\n" +
"\x06uptime\x18\x03 \x01(\rR\x06uptimeB`\n" +
"\x13com.geeksville.meshB\x0ePaxcountProtosZ\x1fmeshstream/generated/meshtastic\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
var (
file_meshtastic_paxcount_proto_rawDescOnce sync.Once
file_meshtastic_paxcount_proto_rawDescData []byte
)
func file_meshtastic_paxcount_proto_rawDescGZIP() []byte {
file_meshtastic_paxcount_proto_rawDescOnce.Do(func() {
file_meshtastic_paxcount_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_paxcount_proto_rawDesc), len(file_meshtastic_paxcount_proto_rawDesc)))
})
return file_meshtastic_paxcount_proto_rawDescData
}
var file_meshtastic_paxcount_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_meshtastic_paxcount_proto_goTypes = []any{
(*Paxcount)(nil), // 0: meshtastic.Paxcount
}
var file_meshtastic_paxcount_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_meshtastic_paxcount_proto_init() }
func file_meshtastic_paxcount_proto_init() {
if File_meshtastic_paxcount_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_paxcount_proto_rawDesc), len(file_meshtastic_paxcount_proto_rawDesc)),
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_meshtastic_paxcount_proto_goTypes,
DependencyIndexes: file_meshtastic_paxcount_proto_depIdxs,
MessageInfos: file_meshtastic_paxcount_proto_msgTypes,
}.Build()
File_meshtastic_paxcount_proto = out.File
file_meshtastic_paxcount_proto_goTypes = nil
file_meshtastic_paxcount_proto_depIdxs = nil
}