perl: Add function to perform AS number lookups.
Commit Message
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
src/perl/Location.xs | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
Comments
> On 1 Oct 2019, at 07:16, Stefan Schantl <stefan.schantl@ipfire.org> wrote:
>
> Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
> ---
> src/perl/Location.xs | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/src/perl/Location.xs b/src/perl/Location.xs
> index ab27f0b..63410c4 100644
> --- a/src/perl/Location.xs
> +++ b/src/perl/Location.xs
> @@ -117,6 +117,32 @@ lookup_country_code(db, address)
> OUTPUT:
> RETVAL
>
> +unsigned int
> +lookup_asn(db, address)
> + struct loc_database* db;
> + char* address;
> +
> + CODE:
> + // Lookup network
> + struct loc_network *network;
I like to initialise variables like this with NULL.
Not sure if that is only considered style.
> + int err = loc_database_lookup_from_string(db, address, &network);
> + if (err) {
> + croak("Could not look up for %s\n", address);
> + }
> +
> + // Extract the ASN
> + unsigned int as_number = loc_network_get_asn(network);
> + loc_network_unref(network);
> +
> + if (as_number) {
> + RETVAL = as_number;
> + } else {
> + //RETVAL = NULL;
> + RETVAL = 0;
> + }
So either you just put the return value of loc_network_get_asn into RETVAL, or you use NULL.
I would prefer NULL here, because 0 is a reserved ASN. Will most likely never be used, but we should follow the RFCs here.
-Michael
> + OUTPUT:
> + RETVAL
> +
> void
> DESTROY(db)
> struct loc_database* db;
> --
> 2.20.1
>
@@ -117,6 +117,32 @@ lookup_country_code(db, address)
OUTPUT:
RETVAL
+unsigned int
+lookup_asn(db, address)
+ struct loc_database* db;
+ char* address;
+
+ CODE:
+ // Lookup network
+ struct loc_network *network;
+ int err = loc_database_lookup_from_string(db, address, &network);
+ if (err) {
+ croak("Could not look up for %s\n", address);
+ }
+
+ // Extract the ASN
+ unsigned int as_number = loc_network_get_asn(network);
+ loc_network_unref(network);
+
+ if (as_number) {
+ RETVAL = as_number;
+ } else {
+ //RETVAL = NULL;
+ RETVAL = 0;
+ }
+ OUTPUT:
+ RETVAL
+
void
DESTROY(db)
struct loc_database* db;