Questions about dhcpd.leases file

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Questions about dhcpd.leases file

ksladic
Hi.

I have a script parsing dhcpd.leases file and would like to ask few questions:

1. What is the difference between dhcpd.leases and dhcpd.leases~ files?
2. My dhcpd.leases parsing script is executed on commit, like:

subnet 192.168.0.0 netmask 255.255.255.0
{
   interface "eth0";
   range 192.168.0.1 192.168.0.100;
   option routers 192.168.0.254;
   on commit {
      execute("/home/user/leases_parse.sh");
   }
}

Can I assume that dhcpd.leases has already been updated with latest lease when my script is executed?

3. Is a new lease always appended at the end of dhcpd.leases file?
4. On renew is a new lease block always added at the end or is existing block updated?

Thank you very much for your comments.

RegK

_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users
Reply | Threaded
Open this post in threaded view
|

Re: Questions about dhcpd.leases file

Simon Hobson
Klemen Sladic <[hidden email]> wrote:

> 1. What is the difference between dhcpd.leases and dhcpd.leases~ files?

The latter is the previous file. Periodically (compiled in 1 hour by default) the server will write out a fresh leases file, move the old one (that's the one with ~ appended to it's name), and the new file moved into place. It's done that way so that if an error occurs, you haven't just over-written the only copy of the file !

> 2. My dhcpd.leases parsing script is executed on commit, like:
>
> subnet 192.168.0.0 netmask 255.255.255.0
> {
>    interface "eth0";
>    range 192.168.0.1 192.168.0.100;
>    option routers 192.168.0.254;
>    on commit {
>       execute("/home/user/leases_parse.sh");
>    }
> }
>
> Can I assume that dhcpd.leases has already been updated with latest lease when my script is executed?

Don't know. It's required that the leases file is updated before sending teh packet to the client, but I don't know if it's defined at what point the on commit is executed.

> 3. Is a new lease always appended at the end of dhcpd.leases file?

Yes

> 4. On renew is a new lease block always added at the end or is existing block updated?

Yes. A lease is never updated in-place - a new record is appended to the leases file which is why you will see several entries for some clients. Obviously this append only method needs a cleanup from time to time - see 1 above.

BTW, there are some things you need to be aware of.

AIUI "on xxxx" scripts are not executed asynchronously - hence running your script has the ability to severely compromise the performance of your DHCP service.
If you are running the script to parse the lease that's just been written, can you obtain the information from within the server ? Eg build a log statement and then just tail the log file ?
Can values be passed in the on xxxx call ? I don't know, but if they can then that might save you have to parse the file.

_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users
Reply | Threaded
Open this post in threaded view
|

Re: Questions about dhcpd.leases file

Bob Harold

On Mon, Feb 12, 2018 at 4:57 PM, Simon Hobson <[hidden email]> wrote:
Klemen Sladic <[hidden email]> wrote:

> 1. What is the difference between dhcpd.leases and dhcpd.leases~ files?

The latter is the previous file. Periodically (compiled in 1 hour by default) the server will write out a fresh leases file, move the old one (that's the one with ~ appended to it's name), and the new file moved into place. It's done that way so that if an error occurs, you haven't just over-written the only copy of the file !

> 2. My dhcpd.leases parsing script is executed on commit, like:
>
> subnet 192.168.0.0 netmask 255.255.255.0
> {
>    interface "eth0";
>    range 192.168.0.1 192.168.0.100;
>    option routers 192.168.0.254;
>    on commit {
>       execute("/home/user/leases_parse.sh");
>    }
> }
>
> Can I assume that dhcpd.leases has already been updated with latest lease when my script is executed?

Don't know. It's required that the leases file is updated before sending teh packet to the client, but I don't know if it's defined at what point the on commit is executed.

> 3. Is a new lease always appended at the end of dhcpd.leases file?

Yes

> 4. On renew is a new lease block always added at the end or is existing block updated?

Yes. A lease is never updated in-place - a new record is appended to the leases file which is why you will see several entries for some clients. Obviously this append only method needs a cleanup from time to time - see 1 above.

BTW, there are some things you need to be aware of.

AIUI "on xxxx" scripts are not executed asynchronously - hence running your script has the ability to severely compromise the performance of your DHCP service.
If you are running the script to parse the lease that's just been written, can you obtain the information from within the server ? Eg build a log statement and then just tail the log file ?
Can values be passed in the on xxxx call ? I don't know, but if they can then that might save you have to parse the file.


If you are using the information that you parse to decide what to return from the on-commit call, what is it that you need that the on-commit does not already pass to you?

If you are parsing the information for some other use, then you would probably be much better to tail the leases file:  tail -F  dhcpd.leases | parse-program
That way you will not affect the performance, and the timing of when it writes the lease file vs the on-commit call won't matter.

-- 
Bob Harold



_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users
Reply | Threaded
Open this post in threaded view
|

Re: Questions about dhcpd.leases file

ksladic
In reply to this post by Simon Hobson
Simon, thank you very much for your explanation, it is really helpful.

I may have to slightly re-design my script. Best way I see is using arguments as Bob also suggested.

Thanks again.

Klemen

On Tue, Feb 13, 2018 at 10:57 AM, Simon Hobson <[hidden email]> wrote:
Klemen Sladic <[hidden email]> wrote:

> 1. What is the difference between dhcpd.leases and dhcpd.leases~ files?

The latter is the previous file. Periodically (compiled in 1 hour by default) the server will write out a fresh leases file, move the old one (that's the one with ~ appended to it's name), and the new file moved into place. It's done that way so that if an error occurs, you haven't just over-written the only copy of the file !

> 2. My dhcpd.leases parsing script is executed on commit, like:
>
> subnet 192.168.0.0 netmask 255.255.255.0
> {
>    interface "eth0";
>    range 192.168.0.1 192.168.0.100;
>    option routers 192.168.0.254;
>    on commit {
>       execute("/home/user/leases_parse.sh");
>    }
> }
>
> Can I assume that dhcpd.leases has already been updated with latest lease when my script is executed?

Don't know. It's required that the leases file is updated before sending teh packet to the client, but I don't know if it's defined at what point the on commit is executed.

> 3. Is a new lease always appended at the end of dhcpd.leases file?

Yes

> 4. On renew is a new lease block always added at the end or is existing block updated?

Yes. A lease is never updated in-place - a new record is appended to the leases file which is why you will see several entries for some clients. Obviously this append only method needs a cleanup from time to time - see 1 above.

BTW, there are some things you need to be aware of.

AIUI "on xxxx" scripts are not executed asynchronously - hence running your script has the ability to severely compromise the performance of your DHCP service.
If you are running the script to parse the lease that's just been written, can you obtain the information from within the server ? Eg build a log statement and then just tail the log file ?
Can values be passed in the on xxxx call ? I don't know, but if they can then that might save you have to parse the file.

_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users


_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users
Reply | Threaded
Open this post in threaded view
|

Re: Questions about dhcpd.leases file

ksladic
In reply to this post by Bob Harold
Hi Bob.

You are right. What I need is MAC and IP and may use them as arguments to the script or tailing the dhcpd.leases.

Thank you very much.

Klemen

On Wed, Feb 14, 2018 at 3:16 AM, Bob Harold <[hidden email]> wrote:

On Mon, Feb 12, 2018 at 4:57 PM, Simon Hobson <[hidden email]> wrote:
Klemen Sladic <[hidden email]> wrote:

> 1. What is the difference between dhcpd.leases and dhcpd.leases~ files?

The latter is the previous file. Periodically (compiled in 1 hour by default) the server will write out a fresh leases file, move the old one (that's the one with ~ appended to it's name), and the new file moved into place. It's done that way so that if an error occurs, you haven't just over-written the only copy of the file !

> 2. My dhcpd.leases parsing script is executed on commit, like:
>
> subnet 192.168.0.0 netmask 255.255.255.0
> {
>    interface "eth0";
>    range 192.168.0.1 192.168.0.100;
>    option routers 192.168.0.254;
>    on commit {
>       execute("/home/user/leases_parse.sh");
>    }
> }
>
> Can I assume that dhcpd.leases has already been updated with latest lease when my script is executed?

Don't know. It's required that the leases file is updated before sending teh packet to the client, but I don't know if it's defined at what point the on commit is executed.

> 3. Is a new lease always appended at the end of dhcpd.leases file?

Yes

> 4. On renew is a new lease block always added at the end or is existing block updated?

Yes. A lease is never updated in-place - a new record is appended to the leases file which is why you will see several entries for some clients. Obviously this append only method needs a cleanup from time to time - see 1 above.

BTW, there are some things you need to be aware of.

AIUI "on xxxx" scripts are not executed asynchronously - hence running your script has the ability to severely compromise the performance of your DHCP service.
If you are running the script to parse the lease that's just been written, can you obtain the information from within the server ? Eg build a log statement and then just tail the log file ?
Can values be passed in the on xxxx call ? I don't know, but if they can then that might save you have to parse the file.


If you are using the information that you parse to decide what to return from the on-commit call, what is it that you need that the on-commit does not already pass to you?

If you are parsing the information for some other use, then you would probably be much better to tail the leases file:  tail -F  dhcpd.leases | parse-program
That way you will not affect the performance, and the timing of when it writes the lease file vs the on-commit call won't matter.

-- 
Bob Harold



_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users


_______________________________________________
dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users