helpers.go 766 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. //go:build linux
  4. package linuxfw
  5. import (
  6. "encoding/hex"
  7. "fmt"
  8. "strings"
  9. "unicode"
  10. "tailscale.com/util/slicesx"
  11. )
  12. func formatMaybePrintable(b []byte) string {
  13. // Remove a single trailing null, if any.
  14. if slicesx.LastEqual(b, 0) {
  15. b = b[:len(b)-1]
  16. }
  17. nonprintable := strings.IndexFunc(string(b), func(r rune) bool {
  18. return r > unicode.MaxASCII || !unicode.IsPrint(r)
  19. })
  20. if nonprintable >= 0 {
  21. return "<hex>" + hex.EncodeToString(b)
  22. }
  23. return string(b)
  24. }
  25. func formatPortRange(r [2]uint16) string {
  26. if r == [2]uint16{0, 65535} {
  27. return fmt.Sprintf(`any`)
  28. } else if r[0] == r[1] {
  29. return fmt.Sprintf(`%d`, r[0])
  30. }
  31. return fmt.Sprintf(`%d-%d`, r[0], r[1])
  32. }