Hi,
Keil Ethernet stack
I have trouble using static address when If I cannot find DHCP Server. I enable Dynamic Host Configuration in Net_Config_ETH_0.h I also specified my static ip address==192.168.0.100 and static Default Gateway =192.168.0.1. Primary DNS Gateway =192.168.0.1.
I am connecting directly my Embedded device ethernet to PC. My PC has static IP address = 192.168.0.1
If I disable Dynamic Host Configuration in Net_Config_ETH_0.h then it all works.
I thought If it cannot find DHCP server it will fallback back to using static DNS server which is my PC.
Kindly suggest what is wrong with my configuration. Does Keil Ethernet stack supports fallback?
Thanks, Naeem
Thanks for reply.
I need to use my device with both scenarios when DHCP server is available then it will allocate dynamic IP address else if host does not have DHCP server then it should fall-back to use static ip address=192.168.0.1 which i assigned. My host machine static IP address=192.168.0.1. static addressing only works If I disable Dynamic Host Configuration in Net_Config_ETH_0.h If I enable Dynamic Host Configuration in Net_Config_ETH_0.h then it does not fall-back static if DHCP server is not present.
Why do you need that?
If you buy a networked printer, then the printer has a setting to enable DHCP. Or to set a fixed IP. Not to do both. Your mobile phone normally only supports DHCP unless you use developer mode - in which case you can set a fixed IP but not together with DHCP.
What you want is an automatic teller machine that, if it fails to contact the bank to verify your card should fallback to give you many anyway.
The only devices I know of that makes use of "fixed" IP if they don't get any DHCP allocation are instead making use of automatic analysis of the network to try to detect the gateway and all IP number in use. And this involves a number of patents which makes it a bit tricky to implement in own devices except for hobby use.
The traditional way a NAS or networked camera handles the situation in networks without a DHCP server is that the customer gets a management tool that you run on a computer. This tool locates all MAC addresses on the network segment and compares with the MAC address range allocated to that manufacturer. Then the tool allows the customer to specify a fixed IP and send to the NAS/camera/...
Sometimes, what "you need" isn't what you should do, because it's the wrong thing. A bad idea to stay away from.
If I connect a cable from your device to a local switch on my table - but haven't connected the switch to the office network - then your device will see a network link. But it will not find any DHCP server. So it will then make the assumption that it's ok to switch over to your fixed IP number. But then I connect the network cable from my local switch into the office network. And suddenly I have a hostile device making use of an IP number that might have already been allocated to something else. So maybe your device then steals the IP from the office printer. You think people will be happy when the printer suddenly stops working?
When you use your device in your own, private, network you can do whatever you like. But then you don't need any auto-failover since you are already the master of the IP number range. When you bring your device into someone else's network, then it isn't any longer your choice what you think is a good idea. Then you'll have to settle for what the network owners things is a good idea. Have you seen many RFC texts with the message "just take an IP number if no DHCP server wants to hand over an IP?"
Remember that in some networks, there may be DHCP servers that are configured to ignore any device not in their white list. The IT admin don't want any equipment to get any IP unless having explicitly white-listed the device and specified exactly what parts of the network and network traffic that should be visible. So not receiving an IP number isn't the same as the network not having a DHCP server.
192.168.0.1 ?
Isn't that most likely the gateway, if present? I'd pick something else.
"I also specified my static ip address==192.168.0.100 and static Default Gateway =192.168.0.1."
192.168.0.100 is something else. But an IP that is likely to be already in use IP.
I better use dynamic address assignment by DHCP server in all cases.
If device is connected directly to Ethernet router which is connected out gateway PC Windows server IP Address=192.168.0.1 then all works then device gets assigned dynamic IP address.
Windows 7/vista machine PC is not connect to any other network or WiFi network However If I connect my device directly to PC running Windows 7/vista machine. It does not have DHCP server on it then I need to use static IP address for Default Gateway.
Kindly give me advise.
If the Windows machine isn't networked then you have no use for a gw address since the Win machine can't forward data.
So what do you want to do on that local link?
Note that IPv6 supports link-local IP numbers. But what is practical so much depends on what your device is expected to do. Or what the Win machine is expected to do with it. You might also have seen how MS (and then others) started to take random 169.x.x.x addresses if no DHCP IP gets assigned.
The PC can communicate with your device without any IP assigned - the actual transfers aren't based on IP numbers but on hw (MAC) addresses. The IP is just there for routing and to look up the hw address of a device.
What meant was does Keil TCP/IP Stack supports AUTOIP if DHCP is enabled and not found then fall-back to use static IP Address.
lwIP stack supports it.
lwip.wikia.com/.../AUTOIP
I have only 128k RAM. If I enable TCP/IP Debug. then my embedded device stops working.
It looks like Keil TCP/IP stack supports AutoIP
www.keil.com/.../group__using__ethernet__interfaces__ipv4__assign.html
I will try this out.
But you do notice the huge difference of the Auto IP mode compared to your original post where you have set a hard-coded IP + GW to use if no DHCP server supplies an IP?
It works AUTOIP
If I specified these addresses in Net_Config.h
My Embedded device IP Address = 169.254.1.0 The network mask = 255.255.0.0 Default Gateway = 169.254.254.255
Connect directly to Computer/Laptop running Windows vista/7
I put my Windows machine IP Address = 169.254.254.255 The network mask = 255.255.0.0
Are you really sure you understand AutoIP?
What do you think this sentence means? "The default gateway is not assigned, because it is not known."
How would that combine with your own statement: "Default Gateway = 169.254.254.255"
I know these functions to enable and disable DHCP which are "netDHCP_Enable" and "netDHCP_Disable".
But I cannot find function to find current settings DHCP is enable or disable.
Errr ... it's your application that's controlling the state? and you can't figure out how to keep a record of what you set it to? OMG!
ok, I guess I need to keep DHCP is enable or disable setting in my variable.
Since you would need some kind of state machine to decide when you want to enable or disable, it would be logical that the state machine also knows the current state so it knows what look for to decide if it should switch state.
Hi Per Westermark,
I need to give user option to enable or disable DHCP and show current DHCP state on my GUI(Web page).
When my embedded device will start. I think I can find if DHCP is enable or disable by callback
netDHCP_Notify
www.keil.com/.../group__ethernet__interface__callbacks.html
Or I can always called DHCP enable in my setup
and I will save current settings into my variable.
When user change DHCP enable/disable from GUI(Web page). I can call netDHCP_Disable or netDHCP_Enable and save current state in my variable.
Is this good solution?