code: func assembleService(attrs []syscall.NetlinkRouteAttr) (*Service, error) {
  
  	var s Service
  
  	for _, attr := range attrs {
  
  		attrType := int(attr.Attr.Type)
  
  		switch attrType {
  
  		case ipvsSvcAttrAddressFamily:
  			s.AddressFamily = native.Uint16(attr.Value)
  		case ipvsSvcAttrProtocol:
  			s.Protocol = native.Uint16(attr.Value)
  		case ipvsSvcAttrAddress:
  			ip, err := parseIP(attr.Value, s.AddressFamily)
  			if err != nil {
  				return nil, err
  			}
  			s.Address = ip
  		case ipvsSvcAttrPort:
  			s.Port = binary.BigEndian.Uint16(attr.Value)
  		case ipvsSvcAttrFWMark:
  			s.FWMark = native.Uint32(attr.Value)
  		case ipvsSvcAttrSchedName:
  			s.SchedName = nl.BytesToString(attr.Value)
  		case ipvsSvcAttrFlags:
  			s.Flags = native.Uint32(attr.Value)
  		case ipvsSvcAttrTimeout:
  			s.Timeout = native.Uint32(attr.Value)
  		case ipvsSvcAttrNetmask:
  			s.Netmask = native.Uint32(attr.Value)
  		case ipvsSvcAttrStats:
  			stats, err := assembleStats(attr.Value)
  			if err != nil {
  				return nil, err
  			}
  			s.Stats = stats
  		}
  
  	}
  	return &s, nil
  }
docs: // assembleService assembles a services back from a hain of netlink attributes