---
# System prepended metadata

title: 20211018_ip-kargs-behavior

---

# 20211018_ip-kargs-behavior

# current behavior
- ip=auto
    - try both, wait some time for ipv4
- ip=dhcp
    - try both, DHCP4 is required
- ip=dhcp4
    - try both, wait some time for ipv4
    - (this is not handled explicitly, it's treated as "auto")
- ip=dhcp6
    - only try ipv6
- ip=dhcp4,dhcp6
    - try both, wait some time for ipv4
- ip=dhcp6,dhcp4
    - try both, wait some time for ipv4
- ip=dhcp,dhcp6
    - try both, wait some time for ipv4
    
    

# desired behavior
    
    
We need to decide what to do with `ip=dhcp` - what does it mean in the future?
Two options I can see:

- ip=dhcp means dhcp* -> try both first one wins
- ip=dhcp maps directly to ip=dhcp4
    - i.e. dhcp is considered dhcp4 and mapped directly there in all cases
    - I think this is the only solution. Changing ip=dhcp to mean "the first one wins" would break existing users
        - +1 - ok so that simplifies our matrix
    
- ip=auto
    - confusing?? What does it do?
    - could we get rid of this option? -> it's the default behavior generated when you only pass 'rd.neednet'...
    - ... and also when the ip= value is unknown
        - I think we should never mention `auto` anywhere and just have an internal mapping and documentation that says "when rd.neednet is specified but no ip= argument is given then ip=dhcp is assumed"
            - Ok
    
- ip=dhcp4
- ip=dhcp6
- ip=dhcp4,dhcp6
- ip=dhcp6,dhcp4


OK let's talk about cases:

- I want dhcp4
    - ip=dhcp4
- I want dhcp6
    - ip=dhcp6
- I want dhcp4, no dhcp6 at all
    - is it different from "I want dhcp4"?
        - looks like ip=dhcp4 will still have ipv6.method=auto, what if someone wants that disabled? 
            - ok, in theory it shouldn't make much difference if you do IPv6 and doesn't wait for it
                - agree - trying to cover all bases -> +1
- I want dhcp6, no dhcp4 at all
- I want dhcp4 and dhcp6 tried, first one wins
- I want dhcp4 and dhcp6 tried, wait extra time for dhcp4
- I want dhcp4 and dhcp6 tried, wait extra time for dhcp6
- I want dhcp4 and dhcp6 tried, wait extra time for BOTH

How do we reconcile these cases? 

It's almost like we need 


what if we come up with a richer format

ip=dhcp4=required,dhcp6=recommended
ip=dhcp4=recommended,dhcp6=tried
ip=dhcp4=required,ipv6=none
ip=dhcp4 -> ip=dhcp4=recommended,dhcp6=tried ?
ip=dhcp4,dhcp6 -> ip=dhcp4=recommended,dhcp6=recommended  ?


- required = fail if it doesn't succeed
- recommended = wait a little longer
- tried = try, but don't wait
- missing qualifier ==  recommended?
    - basically we have to figure out what a missing qualifier maps to
- none = dont try, disabled
    - for this you can omit dhcpX?
        - maybe, but that's not what we have today -> ack

Of course we could use different syntax, mostly talking about the spirit of trying to encode more information. 
Yes, it seems those 3 should cover all combinations...