code: func (h *Handle) LinkByAlias(alias string) (Link, error) {
  	if h.lookupByDump {
  		return h.linkByAliasDump(alias)
  	}
  
  	req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
  
  	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
  	req.AddData(msg)
  
  	attr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))
  	req.AddData(attr)
  
  	nameData := nl.NewRtAttr(unix.IFLA_IFALIAS, nl.ZeroTerminated(alias))
  	req.AddData(nameData)
  
  	link, err := execGetLink(req)
  	if err == unix.EINVAL {
  		// older kernels don't support looking up via IFLA_IFALIAS
  		// so fall back to dumping all links
  		h.lookupByDump = true
  		return h.linkByAliasDump(alias)
  	}
  
  	return link, err
  }
docs: // LinkByAlias finds a link by its alias and returns a pointer to the object.
  // If there are multiple links with the alias it returns the first one