--- host/src/simtrace2-remsim.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/host/src/simtrace2-remsim.c b/host/src/simtrace2-remsim.c index 201ff71..48186d8 100644 --- a/host/src/simtrace2-remsim.c +++ b/host/src/simtrace2-remsim.c @@ -50,6 +50,8 @@ #include <osmocom/sim/class_tables.h> #include <osmocom/sim/sim.h>
+#define ATR_MAX_LEN 33 + static void atr_update_csum(uint8_t *atr, unsigned int atr_len) { uint8_t csum = 0; @@ -181,6 +183,7 @@ static void print_help(void) "\t-h\t--help\n" "\t-i\t--gsmtap-ip\tA.B.C.D\n" "\t-a\t--skip-atr\n" + "\t-t\t--set-atr\tATR-STRING in HEX\n" "\t-k\t--keep-running\n" "\t-n\t--pcsc-reader-num\n" "\t-V\t--usb-vendor\tVENDOR_ID\n" @@ -199,6 +202,7 @@ static const struct option opts[] = { { "remote-udp-port", 1, 0, 'p' }, { "gsmtap-ip", 1, 0, 'i' }, { "skip-atr", 0, 0, 'a' }, + { "set-atr", 1, 0, 't' }, { "help", 0, 0, 'h' }, { "keep-running", 0, 0, 'k' }, { "pcsc-reader-num", 1, 0, 'n' }, @@ -283,6 +287,9 @@ int main(int argc, char **argv) int rc; int c, ret = 1; int skip_atr = 0; + char *atr = "3b00"; + uint8_t real_atr[ATR_MAX_LEN]; + int atr_len; int keep_running = 0; int remote_udp_port = 52342; int if_num = 0, vendor_id = -1, product_id = -1; @@ -298,7 +305,7 @@ int main(int argc, char **argv) while (1) { int option_index = 0;
- c = getopt_long(argc, argv, "r:p:hi:V:P:C:I:S:A:H:akn:", opts, &option_index); + c = getopt_long(argc, argv, "r:p:hi:V:P:C:I:S:A:H:akn:t:", opts, &option_index); if (c == -1) break; switch (c) { @@ -318,6 +325,9 @@ int main(int argc, char **argv) case 'a': skip_atr = 1; break; + case 't': + atr = optarg; + break; case 'k': keep_running = 1; break; @@ -348,6 +358,12 @@ int main(int argc, char **argv) } }
+ atr_len = osmo_hexparse(atr,real_atr,ATR_MAX_LEN); + if(atr_len < 2) { + fprintf(stderr, "Invalid ATR - please omit a leading 0x and only use valid hex digits and whitespace. ATRs need to be between 2 and 33 bytes long.\n"); + goto do_exit; + } + if (!remote_udp_host && (vendor_id < 0 || product_id < 0)) { fprintf(stderr, "You have to specify the vendor and product ID\n"); goto do_exit; @@ -438,9 +454,8 @@ int main(int argc, char **argv)
if (!skip_atr) { /* set the ATR */ - uint8_t real_atr[] = { 0x3B, 0x00 }; // the simplest ATR - atr_update_csum(real_atr, sizeof(real_atr)); - osmo_st2_cardem_request_set_atr(ci, real_atr, sizeof(real_atr)); + atr_update_csum(real_atr, atr_len); + osmo_st2_cardem_request_set_atr(ci, real_atr, atr_len); }
/* select remote (forwarded) SIM */
--- host/src/simtrace2-remsim.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/host/src/simtrace2-remsim.c b/host/src/simtrace2-remsim.c index 201ff71..48186d8 100644 --- a/host/src/simtrace2-remsim.c +++ b/host/src/simtrace2-remsim.c @@ -50,6 +50,8 @@ #include <osmocom/sim/class_tables.h> #include <osmocom/sim/sim.h>
+#define ATR_MAX_LEN 33 + static void atr_update_csum(uint8_t *atr, unsigned int atr_len) { uint8_t csum = 0; @@ -181,6 +183,7 @@ static void print_help(void) "\t-h\t--help\n" "\t-i\t--gsmtap-ip\tA.B.C.D\n" "\t-a\t--skip-atr\n" + "\t-t\t--set-atr\tATR-STRING in HEX\n" "\t-k\t--keep-running\n" "\t-n\t--pcsc-reader-num\n" "\t-V\t--usb-vendor\tVENDOR_ID\n" @@ -199,6 +202,7 @@ static const struct option opts[] = { { "remote-udp-port", 1, 0, 'p' }, { "gsmtap-ip", 1, 0, 'i' }, { "skip-atr", 0, 0, 'a' }, + { "set-atr", 1, 0, 't' }, { "help", 0, 0, 'h' }, { "keep-running", 0, 0, 'k' }, { "pcsc-reader-num", 1, 0, 'n' }, @@ -283,6 +287,9 @@ int main(int argc, char **argv) int rc; int c, ret = 1; int skip_atr = 0; + char *atr = "3b00"; + uint8_t real_atr[ATR_MAX_LEN]; + int atr_len; int keep_running = 0; int remote_udp_port = 52342; int if_num = 0, vendor_id = -1, product_id = -1; @@ -298,7 +305,7 @@ int main(int argc, char **argv) while (1) { int option_index = 0;
- c = getopt_long(argc, argv, "r:p:hi:V:P:C:I:S:A:H:akn:", opts, &option_index); + c = getopt_long(argc, argv, "r:p:hi:V:P:C:I:S:A:H:akn:t:", opts, &option_index); if (c == -1) break; switch (c) { @@ -318,6 +325,9 @@ int main(int argc, char **argv) case 'a': skip_atr = 1; break; + case 't': + atr = optarg; + break; case 'k': keep_running = 1; break; @@ -348,6 +358,12 @@ int main(int argc, char **argv) } }
+ atr_len = osmo_hexparse(atr,real_atr,ATR_MAX_LEN); + if(atr_len < 2) { + fprintf(stderr, "Invalid ATR - please omit a leading 0x and only use valid hex digits and whitespace. ATRs need to be between 2 and 33 bytes long.\n"); + goto do_exit; + } + if (!remote_udp_host && (vendor_id < 0 || product_id < 0)) { fprintf(stderr, "You have to specify the vendor and product ID\n"); goto do_exit; @@ -438,9 +454,8 @@ int main(int argc, char **argv)
if (!skip_atr) { /* set the ATR */ - uint8_t real_atr[] = { 0x3B, 0x00 }; // the simplest ATR - atr_update_csum(real_atr, sizeof(real_atr)); - osmo_st2_cardem_request_set_atr(ci, real_atr, sizeof(real_atr)); + atr_update_csum(real_atr, atr_len); + osmo_st2_cardem_request_set_atr(ci, real_atr, atr_len); }
/* select remote (forwarded) SIM */
Hi Leonhard,
thanks for your patch. I tried to apply it to current master, but it doesn't apply.
The previous commit 201ff71 you reference in your patch also doesn't appear to be in the official git repository.
Please try to re-submit as a patch that applies on top of current master.
Thanks!
Hey Harald!
Yeah, sorry, I forgot to pull before creating the patch... I recreated it on top of the current HEAD of the repo and verified that the patch works on my local setup. I hope that this fixes the issue. This is my first time of contributing via patches and send-email. Sorry for the inconvenience..
Leo
thanks, pushed to https://gerrit.osmocom.org/c/simtrace2/+/20931
Please keep in mind that the proof-of-concept 'remsim' hack inside simtrace2.git has been long superseeded by a proper implementation in osmo-remsim.git.
I'm actually quite tempted to remove the old proof-of-concept code, as it's not really offering anything that the real osmo-remsim cannot do.
Regards, Harald
Thanks for pushing the change into Gerrit!
I didn't know about the proper implementation in osmo-remsim.git so I will check that out and test if it works with my setup.
Greetings, Leo ________________________________