tailscale/tailscale · error

missing 'ip' parameter

Error message

missing 'ip' parameter

What it means

Sent as 400 by servePing when the 'ip' parameter is absent.

Source

Thrown at ipn/localapi/localapi.go:1271

	}
	err := h.b.SetExpirySooner(r.Context(), expiryTime)
	if err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}
	w.Header().Set("Content-Type", "text/plain")
	io.WriteString(w, "done\n")
}

func (h *Handler) servePing(w http.ResponseWriter, r *http.Request) {
	ctx := r.Context()
	if r.Method != httpm.POST {
		http.Error(w, "want POST", http.StatusBadRequest)
		return
	}
	ipStr := r.FormValue("ip")
	if ipStr == "" {
		http.Error(w, "missing 'ip' parameter", http.StatusBadRequest)
		return
	}
	ip, err := netip.ParseAddr(ipStr)
	if err != nil {
		http.Error(w, "invalid IP", http.StatusBadRequest)
		return
	}
	pingTypeStr := r.FormValue("type")
	if pingTypeStr == "" {
		http.Error(w, "missing 'type' parameter", http.StatusBadRequest)
		return
	}
	size := 0
	sizeStr := r.FormValue("size")
	if sizeStr != "" {
		size, err = strconv.Atoi(sizeStr)
		if err != nil {
			http.Error(w, "invalid 'size' parameter", http.StatusBadRequest)

View on GitHub (pinned to 6e0912f979)

Solutions

  1. Include the 'ip' parameter (e.g. ip=100.64.1.2)
  2. Check parameter spelling and form encoding
  3. Use the tailscale CLI ping command which sets it correctly
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at ipn/localapi/localapi.go:1271 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tailscale/tailscale@6e0912f979 (2026-08-18). Data as JSON: /api/errors/a5b78bd59867088e. Report an issue: GitHub.