2 libloc - A library to determine the location of someone on the Internet
4 Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
17 #ifndef LIBLOC_FORMAT_H
18 #define LIBLOC_FORMAT_H
22 #define LOC_DATABASE_MAGIC "LOCDBXX"
24 enum loc_database_version
{
25 LOC_DATABASE_VERSION_UNSET
= 0,
26 LOC_DATABASE_VERSION_1
= 1,
29 #define LOC_DATABASE_VERSION_LATEST LOC_DATABASE_VERSION_1
33 #define LOC_DATABASE_DOMAIN "_v%u._db.location.ipfire.org"
35 #define LOC_DATABASE_PAGE_SIZE 4096
36 #define LOC_SIGNATURE_MAX_LENGTH (LOC_DATABASE_PAGE_SIZE / 2)
38 struct loc_database_magic
{
41 // Database version information
45 struct loc_database_header_v1
{
46 // UNIX timestamp when the database was created
49 // Vendor who created the database
52 // Description of the database
55 // License of the database
58 // Tells us where the ASes start
62 // Tells us where the networks start
63 uint32_t network_data_offset
;
64 uint32_t network_data_length
;
66 // Tells us where the network nodes start
67 uint32_t network_tree_offset
;
68 uint32_t network_tree_length
;
70 // Tells us where the countries start
71 uint32_t countries_offset
;
72 uint32_t countries_length
;
74 // Tells us where the pool starts
82 uint32_t signature1_length
;
83 uint32_t signature2_length
;
84 char signature1
[LOC_SIGNATURE_MAX_LENGTH
];
85 char signature2
[LOC_SIGNATURE_MAX_LENGTH
];
87 // Add some padding for future extensions
91 struct loc_database_network_node_v1
{
98 struct loc_database_network_v1
{
99 // The start address and prefix will be encoded in the tree
101 // The country this network is located in
102 char country_code
[2];
114 struct loc_database_as_v1
{
122 struct loc_database_country_v1
{
124 char continent_code
[2];
126 // Name in the string pool