]> git.ipfire.org Git - people/ms/libloc.git/blame - src/loc/format.h
Bump database version to "1"
[people/ms/libloc.git] / src / loc / format.h
CommitLineData
a5db3e49
MT
1/*
2 libloc - A library to determine the location of someone on the Internet
3
4 Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
5
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.
10
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.
15*/
16
17#ifndef LIBLOC_FORMAT_H
18#define LIBLOC_FORMAT_H
19
20#include <stdint.h>
21
8eb67d26 22#define LOC_DATABASE_MAGIC "LOCDBXX"
30ac38a1 23
b904896a
MT
24enum loc_database_version {
25 LOC_DATABASE_VERSION_UNSET = 0,
26 LOC_DATABASE_VERSION_1 = 1,
27};
28
30ac38a1
MT
29#ifdef LIBLOC_PRIVATE
30
b904896a 31#define LOC_DATABASE_VERSION_LATEST LOC_DATABASE_VERSION_1
8eb67d26 32
f4fef543 33#define STR(x) #x
b904896a 34#define LOC_DATABASE_DOMAIN(version) "_v" STR(version) "._db.location.ipfire.org"
f4fef543 35
6809d5ac
MT
36#define LOC_DATABASE_PAGE_SIZE 4096
37
726f9984
MT
38#define LOC_SIGNATURE_MAX_LENGTH 4096
39
8eb67d26
MT
40struct loc_database_magic {
41 char magic[7];
42
43 // Database version information
44 uint8_t version;
45};
46
b904896a 47struct loc_database_header_v1 {
96ea74a5
MT
48 // UNIX timestamp when the database was created
49 uint64_t created_at;
50
a5db3e49
MT
51 // Vendor who created the database
52 uint32_t vendor;
53
54 // Description of the database
55 uint32_t description;
56
4bf49d00
MT
57 // License of the database
58 uint32_t license;
59
a5db3e49
MT
60 // Tells us where the ASes start
61 uint32_t as_offset;
62 uint32_t as_length;
63
f3e02bc5 64 // Tells us where the networks start
438db08c
MT
65 uint32_t network_data_offset;
66 uint32_t network_data_length;
67
f66b7b09 68 // Tells us where the network nodes start
438db08c
MT
69 uint32_t network_tree_offset;
70 uint32_t network_tree_length;
f3e02bc5 71
ec684c1a
MT
72 // Tells us where the countries start
73 uint32_t countries_offset;
74 uint32_t countries_length;
75
a5db3e49
MT
76 // Tells us where the pool starts
77 uint32_t pool_offset;
78 uint32_t pool_length;
cce795cc 79
726f9984
MT
80 // Signature
81 uint32_t signature_length;
82 char signature[LOC_SIGNATURE_MAX_LENGTH];
83
cce795cc
MT
84 // Add some padding for future extensions
85 char padding[32];
a5db3e49
MT
86};
87
b904896a 88struct loc_database_network_node_v1 {
3b5f4af2
MT
89 uint32_t zero;
90 uint32_t one;
39a55353
MT
91
92 uint32_t network;
3b5f4af2
MT
93};
94
b904896a 95struct loc_database_network_v1 {
39a55353 96 // The start address and prefix will be encoded in the tree
3b5f4af2
MT
97
98 // The country this network is located in
99 char country_code[2];
100
101 // ASN
102 uint32_t asn;
a99e7c2b
MT
103
104 // Flags
126cb18a
MT
105 uint16_t flags;
106
107 // Reserved
108 char padding[2];
3b5f4af2
MT
109};
110
b904896a 111struct loc_database_as_v1 {
a5db3e49
MT
112 // The AS number
113 uint32_t number;
114
115 // Name
116 uint32_t name;
117};
118
b904896a 119struct loc_database_country_v1 {
ec684c1a
MT
120 char code[2];
121 char continent_code[2];
122
123 // Name in the string pool
124 uint32_t name;
125};
126
a5db3e49 127#endif
30ac38a1 128#endif