func main() {
var (
- cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file")
- niceRaw = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness")
- rxOnly = flag.Bool("rx", false, "Only receive packets")
- txOnly = flag.Bool("tx", false, "Only transmit packets")
- listOnly = flag.Bool("list", false, "Only list remote packets")
- rxRate = flag.Int("rxrate", 0, "Maximal receive rate, pkts/sec")
- txRate = flag.Int("txrate", 0, "Maximal transmit rate, pkts/sec")
- spoolPath = flag.String("spool", "", "Override path to spool")
- logPath = flag.String("log", "", "Override path to logfile")
- quiet = flag.Bool("quiet", false, "Print only errors")
- debug = flag.Bool("debug", false, "Print debug messages")
- version = flag.Bool("version", false, "Print version information")
- warranty = flag.Bool("warranty", false, "Print warranty information")
+ cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file")
+ niceRaw = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness")
+ rxOnly = flag.Bool("rx", false, "Only receive packets")
+ txOnly = flag.Bool("tx", false, "Only transmit packets")
+ listOnly = flag.Bool("list", false, "Only list remote packets")
+ onlyPktsRaw = flag.String("pkts", "", "Recieve only that packets, comma separated")
+ rxRate = flag.Int("rxrate", 0, "Maximal receive rate, pkts/sec")
+ txRate = flag.Int("txrate", 0, "Maximal transmit rate, pkts/sec")
+ spoolPath = flag.String("spool", "", "Override path to spool")
+ logPath = flag.String("log", "", "Override path to logfile")
+ quiet = flag.Bool("quiet", false, "Print only errors")
+ debug = flag.Bool("debug", false, "Print debug messages")
+ version = flag.Bool("version", false, "Print version information")
+ warranty = flag.Bool("warranty", false, "Print warranty information")
onlineDeadline = flag.Uint("onlinedeadline", 0, "Override onlinedeadline option")
maxOnlineTime = flag.Uint("maxonlinetime", 0, "Override maxonlinetime option")
}
}
+ var onlyPkts map[[32]byte]bool
+ if len(*onlyPktsRaw) > 0 {
+ splitted = strings.Split(*onlyPktsRaw, ",")
+ onlyPkts = make(map[[32]byte]bool, len(splitted))
+ for _, pktIdRaw := range splitted {
+ pktId, err := nncp.FromBase32(pktIdRaw)
+ if err != nil {
+ log.Fatalln("Invalid packet specified: ", err)
+ }
+ pktIdArr := new([32]byte)
+ copy(pktIdArr[:], pktId)
+ onlyPkts[*pktIdArr] = true
+ }
+ }
+
if !ctx.CallNode(
node,
addrs,
*onlineDeadline,
*maxOnlineTime,
*listOnly,
+ onlyPkts,
) {
os.Exit(1)
}
txRate int
isDead bool
listOnly bool
+ onlyPkts map[[32]byte]bool
sync.RWMutex
}
xxOnly TRxTx,
rxRate, txRate int,
onlineDeadline, maxOnlineTime uint,
- listOnly bool) (*SPState, error) {
+ listOnly bool,
+ onlyPkts map[[32]byte]bool,
+) (*SPState, error) {
err := ctx.ensureRxDir(nodeId)
if err != nil {
return nil, err
rxRate: rxRate,
txRate: txRate,
listOnly: listOnly,
+ onlyPkts: onlyPkts,
}
var infosPayloads [][]byte
SdsAdd(sdsp, SDS{"offset": strconv.FormatInt(offset, 10)}),
"",
)
- if !state.listOnly {
+ if !state.listOnly && (state.onlyPkts == nil || state.onlyPkts[*info.Hash]) {
replies = append(replies, MarshalSP(
SPTypeFreq,
SPFreq{info.Hash, uint64(offset)},