Skip to content
Snippets Groups Projects
path_attribute_flags.go 917 B
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package packet
    
    import "bytes"
    
    func decodePathAttrFlags(buf *bytes.Buffer, pa *PathAttribute) error {
    	flags := uint8(0)
    	err := decode(buf, []interface{}{&flags})
    	if err != nil {
    		return err
    	}
    
    	pa.Optional = isOptional(flags)
    	pa.Transitive = isTransitive(flags)
    	pa.Partial = isPartial(flags)
    	pa.ExtendedLength = isExtendedLength(flags)
    
    	return nil
    }
    
    func isOptional(x uint8) bool {
    	if x&128 == 128 {
    		return true
    	}
    	return false
    }
    
    func isTransitive(x uint8) bool {
    	if x&64 == 64 {
    		return true
    	}
    	return false
    }
    
    func isPartial(x uint8) bool {
    	if x&32 == 32 {
    		return true
    	}
    	return false
    }
    
    func isExtendedLength(x uint8) bool {
    	if x&16 == 16 {
    		return true
    	}
    	return false
    }
    
    
    func setOptional(x uint8) uint8 {
    	return x | 128
    }
    
    func setTransitive(x uint8) uint8 {
    	return x | 64
    }
    
    func setPartial(x uint8) uint8 {
    	return x | 32
    }
    
    func setExtendedLength(x uint8) uint8 {
    	return x | 16
    }