code: func makeListener(name, addr string, port int) *envoy.Listener {
  	return &envoy.Listener{
  		Name:    fmt.Sprintf("%s:%s:%d", name, addr, port),
  		Address: makeAddress(addr, port),
  	}
  }
docs: // makeListener returns a listener with name and bind details set. Filters must
  // be added before it's useful.
  //
  // Note on names: Envoy listeners attempt graceful transitions of connections
  // when their config changes but that means they can't have their bind address
  // or port changed in a running instance. Since our users might choose to change
  // a bind address or port for the public or upstream listeners, we need to
  // encode those into the unique name for the listener such that if the user
  // changes them, we actually create a whole new listener on the new address and
  // port. Envoy should take care of closing the old one once it sees it's no
  // longer in the config.